gpt4 book ai didi

Android:同一 View 上的多个手势检测器

转载 作者:太空狗 更新时间:2023-10-29 13:22:45 25 4
gpt4 key购买 nike

我有一个用 ScrollView 包装的 TextView。我需要做的是在我的 TextView 上检测比例和常用手势(如点击、双击和其他)。另外,我想要一些手势来处理标准处理程序(例如滚动)。我只是无法掌握基础知识,我不知道为此编写什么代码。我为它们制作了两个检测器(ScaleGestureDetector 和 GestureDetector)和监听器。另外,我像这样为我的 TextView 设置了 onTouchListener:

tw.setOnTouchListener(new OnTouchListener() {
public boolean onTouch(View view, MotionEvent motionEvent) {
if (!gestureDetector.onTouchEvent(motionEvent)) {
scaleGestureDetector.onTouchEvent(motionEvent);
};
return true;
}
});

没有检测到手势。我用谷歌搜索的每个示例都使用一个检测器。有人可以帮我解决这个概念吗?如何在同一 View 上检测缩放(或捏合缩放)、双击、单击等?

最佳答案

一种解决方案是为您的两个检测器调用 onTouchEvent:

tw.setOnTouchListener(new OnTouchListener() {
public boolean onTouch(View view, MotionEvent motionEvent) {
gestureDetector.onTouchEvent(motionEvent);
scaleGestureDetector.onTouchEvent(motionEvent);
return true;
}
});

然而,这可能会导致不良行为,因为两个探测器可能会同时触发;例如,一个手势可能被识别为缩放手势和滚动手势。

为了解决这个问题,您可以引入一个新变量 scaleOngoing 来跟踪缩放事件是否正在进行:

scaleGestureDetector = new ScaleGestureDetector(context, new ScaleGestureDetector.OnScaleGestureListener() {
public void onScaleEnd(ScaleGestureDetector detector) {
scaleOngoing = false;
}
public boolean onScaleBegin(ScaleGestureDetector detector) {
scaleOngoing = true;
return true;
}
public boolean onScale(ScaleGestureDetector detector) {
// do scaling here
return false;
}
});

然后让您的 GestureDetector 的监听器检查是否正在发生缩放手势:

mGestureDetector = new GestureDetector(context, new GestureDetector.SimpleOnGestureListener() {
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
if(!scaleOngoing) {
// do scrolling here
}
return true;
}
});

关于Android:同一 View 上的多个手势检测器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26345832/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com