gpt4 book ai didi

android - 带有按钮的自定义 View 实现 OnGestureListener

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:03:16 26 4
gpt4 key购买 nike

在过去的几个小时里,我一直在崩溃,用 google 搜索了 hell ,但 StackOverflow 或其他地方的例子都没有对我有用,所以就这样吧……

我有一个自定义 View ,扩展了 LinearLayout 并实现了 GestureDetector.OnGestureListener

在我的自定义布局中,我有 3 个按钮,每个按钮都有一个点击监听器。我想要的是能够在 View 中随处 Fling 以执行某些操作,而且还能够单击按钮。

我的 onFling 函数工作得很好如果我在 View 内猛扑但没有超过其中一个按钮。如果我滑过其中一个按钮,它在大多数情况下会执行一次点击,或者在某些情况下不会执行任何操作。

这是我的代码的相关部分:

@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
float velocityY) {
if (Math.abs(e1.getY() - e2.getY()) > SWIPE_MAX_OFF_PATH) {
return false;
}
// right to left swipe
if (e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE
&& Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
viewFlipper.setInAnimation(slideLeftIn);
viewFlipper.setOutAnimation(slideLeftOut);
viewFlipper.showNext();
return true;

} else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE
&& Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
viewFlipper.setInAnimation(slideRightIn);
viewFlipper.setOutAnimation(slideRightOut);
viewFlipper.showPrevious();
return true;
}

return false;
}

@Override
public boolean onDown(MotionEvent e) {
// TODO Auto-generated method stub
return true;
}

@Override
public void onLongPress(MotionEvent e) {
// TODO Auto-generated method stub

}

@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,
float distanceY) {
// TODO Auto-generated method stub
return false;
}

@Override
public void onShowPress(MotionEvent e) {
// TODO Auto-generated method stub

}

@Override
public boolean onSingleTapUp(MotionEvent e) {
// TODO Auto-generated method stub
return false;
}

@Override
public boolean onTouchEvent(MotionEvent event) {
if (gestureDetector.onTouchEvent(event)) {
return gestureDetector.onTouchEvent(event);
}
return false;
}

尝试了 return true 的任意组合;返回假;我能想到...将不胜感激任何帮助! :)

谢谢!

最佳答案

这就是最终为我解决的问题......(只有我的问题中修改过的代码)。不确定这是否是最佳解决方案,但它有效:

@Override
public boolean onDown(MotionEvent e) {
// TODO Auto-generated method stub
return false;
}

@Override
public boolean onTouchEvent(MotionEvent e) {
return gestureDetector.onTouchEvent(e);
}

@Override
public boolean onInterceptTouchEvent(MotionEvent e) {
return onTouchEvent(e);
}

这将允许滑动手势,甚至在按钮上,也允许简单地点击按钮但是如果你有另一个 View 在这个 View 后面有按钮,有时点击会向后传递并执行 onClick在 View 后面的按钮上。解决方案是将 "android:clickable="true" 添加到前 View 的根布局(LinearLayout、FrameLayout 或其他)。

关于android - 带有按钮的自定义 View 实现 OnGestureListener,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10935221/

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