手势监听要用到OnGestureListener接口和GestureDetector,同时要配合OnTouchListener一同使用,下面是具体步骤:
1、写一个类,实现OnGestureListener接口,实现以下方法:
@Override
public boolean onDown(MotionEvent e) {
// TODO 触摸屏按下时立刻触发
return false;
}
@Override
public void onShowPress(MotionEvent e) {
// TODO 短按,触摸屏按下后片刻后抬起,会触发这个手势,如果迅速抬起则不会;强调的是没有松开或者拖动的状态,由一个ACTION_DOWN触发
}
@Override
public boolean onSingleTapUp(MotionEvent e) {
// TODO 抬起,手指离开触摸屏时触发(长按、滚动、滑动时,不会触发这个手势)
return false;
}
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,
float distanceY) {
// TODO 用户按下触摸屏,并拖动,由1个 ACTION_DOWN, 多个ACTION_MOVE触发
return false;
}
@Override
public void onLongPress(MotionEvent e) {
// TODO 长按,触摸屏按下后既不抬起也不移动,由多个 ACTION_DOWN触发
}
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
float velocityY) {
// 滑动,触摸屏按下后快速移动并抬起,会先触发滚动手势,跟着触发一个滑动手势
// 参数解释:
// e1:第1个ACTION_DOWN MotionEvent
// e2:最后一个ACTION_MOVE MotionEvent
// velocityX:X轴上的移动速度,像素/秒
// velocityY:Y轴上的移动速度,像素/秒
return false;
}
private GestureDetector gd = new GestureDetector(this, new MyOnGestureListener());
lv_music.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
return gd.onTouchEvent(event);
}
});
lv_music.setLongClickable(true);
注意,这里要将控件的长按事件设置为true,只有这样,view才能够处理不同于Tap(轻触)的hold(即ACTION_MOVE,或者多个ACTION_DOWN),我们同样可以通过layout定义中的android:longClickable来做到这一点。否则onFling()事件将不会被捕捉到。
至此结束。
相关帖子:
http://www.oschina.net/question/12_1515
http://www.cnblogs.com/a284628487/p/3299773.html
http://www.cnblogs.com/sw926/p/3208158.html
http://blog.csdn.net/tsdl2009/article/details/5810922这个比较复杂了