详解Android Libgdx中ScrollPane和Actor事件冲突问题的解决办法

在Libgdx的使用过程中,经常会用到ScrollPane这个widget,来实现滑动效果, 如下所示:
但是如果想在上面的效果上添加一点扩展,比如ScrollPane中的Actor可以从ScrollPane中移出来,并添加到Stage中,则需要添加额外的逻辑
具体代码参考如下:
/**
* Created by Danny.姜 on 17/7/26.
*/
public class TestAdapter extends ApplicationAdapter {
Stage stage;
ScrollPane scrollPane;
Table table;
private float lastStageX;
private float lastStageY;
ActorGestureListener actorGestureListener;
private InputListener inputListener = new InputListener() {
@Override
public boolean touchDown(InputEvent event, float x, float y, int pointer, int button) {
Log.e("DANNY", "actor touch down");
if (pointer == 0) {
lastStageX = event.getStageX();
lastStageY = event.getStageY();
inStage = false;
}
return true;
}
@Override
public void touchDragged(InputEvent event, float x, float y, int pointer) {
Log.e("DANNY", "actor touch dragging");
Actor actor = event.getListenerActor();
if (cancelTouchFocus) {
float currentX = event.getStageX();
float currentY = event.getStageY();
actor.moveBy(currentX - lastStageX, currentY - lastStageY);
lastStageX = currentX;
lastStageY = currentY;
if (!inStage) {
Vector2 vector2 = actor.localToStageCoordinates(new Vector2());
actor.setPosition(vector2.x, vector2.y);
stage.addActor(actor);
stage.cancelTouchFocusExcept(this, actor);
inStage = true;
}
}
}
@Override
public void touchUp(InputEvent event, float x, float y, int pointer, int button) {
Log.e("DANNY", "actor touch up");
cancelTouchFocus = false;
}
};
@Override
public void create() {
super.create();
stage = new Stage();
stage.setDebugAll(true);
Gdx.input.setInputProcessor(stage);
actorGestureListener = new ActorGestureListener() {
@Override
public boolean longPress(Actor actor, float x, float y) {
Log.e("DANNY", "actor gesture listener long pressed");
cancelTouchFocus = true;
return super.longPress(actor, x, y);
}
};
table = new Table();
scrollPane = new ScrollPane(table, new ScrollPane.ScrollPaneStyle());
scrollPane.setSize(stage.getWidth(), 500);
scrollPane.setScrollingDisabled(false, true);
scrollPane.setCancelTouchFocus(false);
scrollPane.setSmoothScrolling(true);
scrollPane.setFlingTime(0);
stage.addActor(scrollPane);
initTable();
}
private boolean cancelTouchFocus = false;
private boolean inStage = false;
private void initTable() {
for (int i = 0; i < 10; i++) {
BaseGdxActor actor = new BaseGdxActor(new TextureRegion(
new Texture("badlogic.jpg")));
table.add(actor).width(actor.getWidth()).pad(10);
actor.addListener(actorGestureListener);
actor.addListener(inputListener);
}
}
@Override
public void render() {
super.render();
Gdx.gl.glClearColor(1, 1, 1, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
stage.act();
stage.draw();
}
}
实现效果如下:
如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
# Android
# Libgdx中ScrollPane和Actor的问题解决办法
# Libgdx中ScrollPane和Actor事件冲突问题
# Android进阶事件分发机制解决事件冲突
# Android之事件分发机制与冲突详解
# Android 无障碍全局悬浮窗实现示例
# Android实现悬浮窗效果
# Android应用内悬浮窗Activity的简单实现
# Kotlin实现Android系统悬浮窗详解
# Android事件冲突解决悬浮窗拖拽处理方案
# 如有
# 希望能
# 所示
# 在上面
# 谢谢大家
# 来实现
# 解决办法
# 经常会
# 过程中
# 则需
# 疑问请
# 移出
# touchDown
# boolean
# InputEvent
# Override
# inputListener
# lastStageX
# float
# private
相关文章:
建站主机选哪种环境更利于SEO优化?
宝塔建站助手安装配置与建站模板使用全流程解析
北京网站制作网页,网站升级改版需要多久?
已有域名能否直接搭建网站?
测试制作网站有哪些,测试性取向的权威测试或者网站?
相册网站制作软件,图片上的网址怎么复制?
如何配置FTP站点权限与安全设置?
建站之星如何实现网站加密操作?
模具网站制作流程,如何找模具客户?
c# F# 的 MailboxProcessor 和 C# 的 Actor 模型
如何选购建站域名与空间?自助平台全解析
如何通过虚拟主机快速完成网站搭建?
实例解析Array和String方法
建站之星安装失败:服务器环境不兼容?
详解免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四)
如何通过远程VPS快速搭建个人网站?
名字制作网站免费,所有小说网站的名字?
详解免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七)
盘锦网站制作公司,盘锦大洼有多少5G网站?
建站之星各版本价格是多少?
香港服务器网站生成指南:免费资源整合与高速稳定配置方案
如何在建站之星网店版论坛获取技术支持?
宝塔面板创建网站无法访问?如何快速排查修复?
建站DNS解析失败?如何正确配置域名服务器?
保定网站制作方案定制,保定招聘的渠道有哪些?找工作的人一般都去哪里看招聘信息?
最好的网站制作公司,网购哪个网站口碑最好,推荐几个?谢谢?
建站之星与建站宝盒如何选择最佳方案?
北京专业网站制作设计师招聘,北京白云观官方网站?
如何安全更换建站之星模板并保留数据?
c++23 std::expected怎么用 c++优雅处理函数错误返回【详解】
h5在线制作网站电脑版下载,h5网页制作软件?
如何快速搭建高效简练网站?
建站之星微信建站一键生成小程序+多端营销系统
中山网站推广排名,中山信息港登录入口?
韩国服务器如何优化跨境访问实现高效连接?
小自动建站系统:AI智能生成+拖拽模板,多端适配一键搭建
广州网站制作的公司,现在专门做网站的公司有没有哪几家是比较好的,性价比高,模板也多的?
c# 在高并发下使用反射发射(Reflection.Emit)的性能
制作网站的基本流程,设计网站的软件是什么?
网站制作中优化长尾关键字挖掘的技巧,建一个视频网站需要多少钱?
如何快速启动建站代理加盟业务?
武汉网站设计制作公司,武汉有哪些比较大的同城网站或论坛,就是里面都是武汉人的?
手机网站制作与建设方案,手机网站如何建设?
简历在线制作网站免费版,如何创建个人简历?
如何快速搭建高效WAP手机网站吸引移动用户?
宝盒自助建站智能生成技巧:SEO优化与关键词设置指南
网站视频怎么制作,哪个网站可以免费收看好莱坞经典大片?
建站之星24小时客服电话如何获取?
营销式网站制作方案,销售哪个网站招聘效果最好?
php json中文编码为null的解决办法
*请认真填写需求信息,我们会在24小时内与您取得联系。