android触摸监听,短按时触发长按的原因
// 长按执行顺序是
// ACTION_DOWN、onDown、onShowPress、onLongPress、ACTION_UP、onSingleTapUp
GestureDetector detector = new GestureDetector(this, new MyGestureListener());
@Override
public boolean onTouchEvent(MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_UP) {
Log.i(TAG, "ACTION_UP");
// 一般不写返回值(只要写了返回值表示onTouchEvent完成,就会执行OnGestureListener
// 里面的onShowPress、onLongPress方法)
} else if (event.getAction() == MotionEvent.ACTION_DOWN) {
Log.i(TAG, "ACTION_DOWN");
// 返回true,表示按下事件被消耗,会执行ACTION_UP;返回false表示还需要执行按下事
// 件,ACTION_UP未执行(写了返回值表示只监听onTouchEvent,不会触发OnGestureListener )
}
return detector.onTouchEvent(event);
}
class MyGestureListener implements OnGestureListener {
public boolean onDown(MotionEvent e) {
Log.i("log", "onDown");
//就是这里,一开始写为false,所有不执行ACTION_UP
// 返回true,表示短按事件完成,会执行其他监听,比如:onShowPress、onLongPress、ACTION_UP;
//返回false表示短按事件未完成,还需要执行按下事件,一定会执行onShowPress、onLongPress,但ACTION_UP不执行
return true;
}
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
float velocityY) {
return false;
}
public void onLongPress(MotionEvent e) {
Log.i("log", "onLongPress");
pauseVideo();
Intent intent = new Intent(WeishiPlayerActivity.this,
ScreenPlayerActivity.class);
intent.putExtra("position", mPositionWhenPaused);
intent.putExtra("strUri", strUri);
startActivity(intent);
}
public boolean onScroll(MotionEvent e1, MotionEvent e2,
float distanceX, float distanceY) {
return false;
}
public void onShowPress(MotionEvent e) {
Log.i("log", "onShowPress");
}
public boolean onSingleTapUp(MotionEvent e) {
Log.i("log", "onSingleTapUp");
return true;
}
}