Lio*_*luz 7 android android-view android-gesture
在过去的几个小时里,我一直在挣扎,用google搜索谷歌的地狱,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;
}
Run Code Online (Sandbox Code Playgroud)
尝试任何返回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);
}
Run Code Online (Sandbox Code Playgroud)
这将允许快速手势,甚至在按钮上,也允许简单地单击按钮,但如果您有另一个视图,该视图后面有按钮,有时单击将向后传递并在视图后面的按钮上执行 onClick。解决方案是添加"android:clickable="true"到前视图的根布局(LinearLayout、FrameLayout 或其他布局)。
| 归档时间: |
|
| 查看次数: |
1502 次 |
| 最近记录: |