您的位置:首页 > 移动开发 > Android开发

Android 手势事件触发及顺序

2017-03-29 00:00 901 查看
利用GestureDetector或GestureDetectorCompat可以监听触摸手势事件,具体的方法有:

方法名
描述
所属接口
onDown
按下
OnGestureListener
onShowPress
按下未松开(短按)
OnGestureListener
onSingleTapUp
抬起
OnGestureListener
onScroll
按下后滑动
OnGestureListener
onLongPress
长按
OnGestureListener
onFling
按下快速滑动后松开
OnGestureListener
onDoubleTap
双击,触发1次
OnDoubleTapListener
onSingleTapConfirmed
单击锁定,触发后其它双击事件不会触发
OnDoubleTapListener
onDoubleTapEvent
双击,单次事件,触发2次
OnDoubleTapListener
本文研究了在不同的手势下,这些方法的触发顺序。结果如下:

单击

onDown

onSingleTapUp

onSingleTapConfirmed

短按(比单击时间长,比长按时间短)

onDown

onShowPress

onSingleTapUp

onSingleTapConfirmed

长按

onDown

onShowPress

onLongPress

双击

onDown

onSingleTapUp

onDoubleTap

onDoubleTapEvent

onDown

onDoubleTapEvent

拖动

onDown

onShowPress(若稍有停顿则出现)

onScroll ……

onFling(若加速滑动则出现)

实验代码:

MainActivity.java

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.MotionEvent;

public class MainActivity extends AppCompatActivity {
Gesture gesture;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

gesture=new Gesture(this)
{
@Override
public boolean onDown(MotionEvent motionEvent) {
Log.d("Gesture","onDown");
return super.onDown(motionEvent);
}

@Override
public void onShowPress(MotionEvent motionEvent) {
Log.d("Gesture","onShowPress");
super.onShowPress(motionEvent);
}

@Override
public boolean onSingleTapUp(MotionEvent motionEvent) {
Log.d("Gesture","onSingleTapUp");
return super.onSingleTapUp(motionEvent);
}

@Override
public boolean onScroll(MotionEvent motionEvent, MotionEvent motionEvent1, float v, float v1) {
Log.d("Gesture","onScroll");
return super.onScroll(motionEvent, motionEvent1, v, v1);
}

@Override
public void onLongPress(MotionEvent motionEvent) {
Log.d("Gesture","onLongPress");
super.onLongPress(motionEvent);
}

@Override
public boolean onFling(MotionEvent motionEvent, MotionEvent motionEvent1, float v, float v1) {
Log.d("Gesture","onFling");
return super.onFling(motionEvent, motionEvent1, v, v1);
}

@Override
public boolean onSingleTapConfirmed(MotionEvent motionEvent) {
Log.d("Gesture","onSingleTapConfirmed");
return super.onSingleTapConfirmed(motionEvent);
}

@Override
public boolean onDoubleTap(MotionEvent motionEvent) {
Log.d("Gesture","onDoubleTap");
return super.onDoubleTap(motionEvent);
}

@Override
public boolean onDoubleTapEvent(MotionEvent motionEvent) {
Log.d("Gesture","onDoubleTapEvent");
return super.onDoubleTapEvent(motionEvent);
}
};
}

@Override
public boolean onTouchEvent(MotionEvent event) {
gesture.onTouchEvent(event);
return super.onTouchEvent(event);
}
}

Gesture.java

import android.content.Context;
import android.view.GestureDetector;
import android.view.MotionEvent;

/**
* 手势
* Created by Wings on 2017/3/29.
*/
public class Gesture implements GestureDetector.OnGestureListener,GestureDetector.OnDoubleTapListener
{
/*成员*/
private GestureDetector gestureDetector;

/*构造方法*/
public Gesture(Context context)
{
gestureDetector=new GestureDetector(context,this);
}

@Override
public boolean onDown(MotionEvent motionEvent) { return false; }

@Override
public void onShowPress(MotionEvent motionEvent) { }

@Override
public boolean onSingleTapUp(MotionEvent motionEvent) { return false; }

@Override
public boolean onScroll(MotionEvent motionEvent, MotionEvent motionEvent1, float v, float v1) { return false; }

@Override
public void onLongPress(MotionEvent motionEvent) { }

@Override
public boolean onFling(MotionEvent motionEvent, MotionEvent motionEvent1, float v, float v1) { return false; }

@Override
public boolean onSingleTapConfirmed(MotionEvent motionEvent) { return false; }

@Override
public boolean onDoubleTap(MotionEvent motionEvent) { return false; }

@Override
public boolean onDoubleTapEvent(MotionEvent motionEvent) { return false; }

/**
* 手势事件触发
* @param event 事件
* @return 事件消耗标志
*/
public boolean onTouchEvent(MotionEvent event)
{
return gestureDetector.onTouchEvent(event);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Android 手势