使用按钮的自定义视图实现OnGestureListener
在过去的几个小时里,我一直在打破我的头脑,谷歌搜索谷歌,没有任何关于StackOverflow或其他地方的例子为我工作,所以这里... ...
我有一个自定义视图,它extends LinearLayout and implements GestureDetector.OnGestureListener
。
在我的自定义布局中,我有3个按钮,每个按钮都有一个点击监听器。 我想要的是能够在视图中的任何地方弹出来执行某些操作,但也能够点击按钮。
如果我在视图内部而不是其中的一个按钮上飞舞,我的onFling功能就会很好 。 如果我扔过其中一个按钮,它会在大多数情况下执行一次点击,或者在某些情况下不执行任何操作。
以下是我的代码的相关部分:
@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;
}
尝试任何组合返回true; 返回false; 我能想到...会感谢任何帮助! :)
谢谢!
以下是我最终解决它的问题......(只是修改了我的问题)。 不知道它是否是最好的解决方案,但它的工作原理:
@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);
}
这将允许抛出手势,即使在按钮上方也允许简单地点击按钮, 但是如果在视图后面有按钮的另一个视图,则有时点击会向后传递并且在视图后面的按钮上执行onClick。 解决方法是在前视图的根布局(LinearLayout,FrameLayout或其他)上添加"android:clickable="true"
。
这里的答案可能与你描述的情况有关https://stackoverflow.com/a/9182176/780700
也许你可以设置一个覆盖使用SurfaceView
在你处理所有的翻牌:http://developer.android.com/reference/android/view/SurfaceView.html
使用顶部的surfaceView,您的按钮仍然可以工作,并且您的甩干应该能够毫无问题地克服按钮。
链接地址: http://www.djcxy.com/p/60341.html