Android 除了滑动手势外,如何在surfaceview上进行单触式操作?
我使用的是surfaceview,我只需要识别向上/向下的手指滑动。 我发现这很有用: 但是,我还希望在用户单击surfaceview(仅单击一次)时调用给定的函数,比如Foo()。这很简单,但当我添加了手势滑动的东西时,它变得非常复杂 有人知道如何做到这两个:单触事件和上/下手指滑动吗 以下是我尝试过的:Android 除了滑动手势外,如何在surfaceview上进行单触式操作?,android,surfaceview,swipe,Android,Surfaceview,Swipe,我使用的是surfaceview,我只需要识别向上/向下的手指滑动。 我发现这很有用: 但是,我还希望在用户单击surfaceview(仅单击一次)时调用给定的函数,比如Foo()。这很简单,但当我添加了手势滑动的东西时,它变得非常复杂 有人知道如何做到这两个:单触事件和上/下手指滑动吗 以下是我尝试过的: 内部OnSwipeTouchListener: public boolean onTouch(View v, MotionEvent event) { Foo(); ret
- 内部OnSwipeTouchListener:
但这导致从用户开始手势的那一刻起调用Foo(),直到手指从屏幕上松开为止(数百次)public boolean onTouch(View v, MotionEvent event) { Foo(); return gestureDetector.onTouchEvent(event); }
- 我还尝试丢弃这个OnSwipeTouchListener类,并在曲面视图本身内部使用onTouchEvent()。这适用于单触式事件;但是,我无法检测到向上/向下滑动
if (event.getAction() == MotionEvent.ACTION_DOWN) { mDownY = event.getY(); } else if (event.getAction() == MotionEvent.ACTION_UP) { // This code was never called!! }
- 这可能会有所帮助
1) 让您的
活动
实现手势检测器.onTestureListener
2) 添加一行,如
gDetector=new gesturedector(getBaseContext(),this)在活动
的onCreate()
中的code>
3) 覆盖属于手势检测器的六种方法中的部分/全部方法
:
@Override
public boolean onDown(MotionEvent arg0) {
return false;
}
@Override
public boolean onFling(MotionEvent start, MotionEvent finish, float xVelocity, float yVelocity) {
if (start.getRawY() < finish.getRawY()) {
Log.d( TAG, "Swiped down!" );
} else {
Log.d( TAG, "Swiped up!" );
}
return true;
}
@Override
public void onLongPress(MotionEvent arg0) {
}
@Override
public boolean onScroll(MotionEvent arg0, MotionEvent arg1, float arg2, float arg3) {
return false;
}
@Override
public void onShowPress(MotionEvent arg0) {
}
@Override
public boolean onSingleTapUp(MotionEvent arg0) {
Log.d( TAG, "Just tapped at " + arg0.getRawX() + "," + arg0.getRawY() + "!" );
return false;
}
(4) 这很重要!否则,手势检测器将无法启动
这一点得到了越来越多的解释;我只是做了一点简化
ETA:第一个链接来自androidsnippets.com(不知道作者是谁),该链接本身的内容改编自anddev.org,原作者“Danuubz”。不推荐使用的构造函数(已在上面合并)的修复程序来自androidsnippets.com上的用户“rurussell00”。第二个链接来自William J.Francis。你能想出解决方案吗?下面的答案有用吗?
@Override
public boolean onTouchEvent(MotionEvent me) {
return gDetector.onTouchEvent(me);
}