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

Android - GestureDetector.onGestureLister

2015-11-20 16:32 435 查看

GestureDetector.onGestureLister

该监听器用来监听手势变化。通过实现它的接口来监听不同的手势变化。如果你只是想监听一个比较简单地子集可以继承
GestureDetector.SimpleOnGestureLister
.

公共方法

// 用户轻触屏幕,有一个MotionEvent ACTION_DOWN触发
public boolean onDown(MotionEnvent event) {
return true;
}


// 用户按下屏幕,快速移动后松开,由1个MotionEvent ACTION_DOWN,多个ACTION_MOVE,1个ACTION_UP触发
// e1: 用户按下事件
// e2: 当前移动事件
// velocityX: 横向每秒移动速度
// velobityY: 纵向每秒移动速度
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
return true;
}


// 用户长按屏幕,有多个MotionEvent ACTION_DOWN触发
public void onLongPress(MotionEvent e) {

}


// 用户按下屏幕并拖动,有1个ACTION_DOWN,多个ACTION_MOVE触发
// distanceX: X轴方向移动距离
// distancdY: Y轴方向移动距离
public void onSroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {

}


// 用户轻按屏幕,尚未松开或正在拖动,有1个MotionEvent ACTION_DOWN触发
public void onShowPress(MotionEvent e) {

}


// 用户轻按后松开,有1个ACTION_UP触发
public boolan onSingleTapUp(MotionEvent e) {
return ture;
}


如何识别用户手势操作(事件来源)

public class MyGesture extends Activity implements OnTouchListener, onGestureListener{
private GesureDetector mGestureDetector;
public MyGesture() {
mGestureDetector = new GestureDetectore(this);
}

public void onCreate(Bundle savedInstanceState) {
...
TextView tv = (TextView) findViewById(R.id.tv);
tv.setOnTouchListener(this);
tv.setFocusable(true);
tv.setClickble(true);
tv.setLongClickable(true);
// 设置false后onLongPress()事件不生效
mGestureDetector.setIsLongPressEnable(true);
}

// 在onTouch()方法中,调用GestureDetector的onTouch()方法,将捕捉到的MotionEvent交给GestureDetector来分析是否有合适的callback函数来处理用户的手势
public boolean onTouch(View v, MotionEvent event){
return mGestureDetector.onTouchEvent(event);
}
...
...
}


用户操作事件

普通点击
onDown() -> onSingleTapUp()


长按不放松
onDown() -> onShowPress() -> onLongPress()


快速滑动
onDown() -> onScroll() -> onScroll() -> .... -> onFling()


当触发
onLongPress()
后无法触发
onScroll()
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Android