注意
1.onDown 多指事件仍然響應(yīng)成單指
2.onScroll滑動(dòng)時(shí)觸發(fā),e1只能獲得一個(gè)點(diǎn) ,而e2卻能獲得多點(diǎn)。(搞不清楚為什么怎么設(shè)計(jì))
3.想在view上加 GestureListener
可以使用下面的代碼:
public class ViewerInnerTouchListener implements OnTouchListener {
private GestureDetector gestureDetector;
public ViewerInnerTouchListener(GAViewer viewer) {
gestureDetector = new GestureDetector(new GestureListener(viewer));
}
public boolean onTouch(View v, MotionEvent event) {
gestureDetector.onTouchEvent(event);
return true;
}
}
setOnTouchListener(new ViewerInnerTouchListener(this));
判斷手勢(shì):
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
if (e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
Log.i("onFling", "onFling");
return true; // Right to left
} else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
return false; // Left to right
}
if (e1.getY() - e2.getY() > SWIPE_MIN_DISTANCE && Math.abs(velocityY) > SWIPE_THRESHOLD_VELOCITY) {
return false; // Bottom to top
} else if (e2.getY() - e1.getY() > SWIPE_MIN_DISTANCE && Math.abs(velocityY) > SWIPE_THRESHOLD_VELOCITY) {
return false; // Top to bottom
}
return false;
}
GestureListener 的幾個(gè)方法要理解
//Touch down時(shí)觸發(fā),不論是touch (包括long) ,scroll
public boolean onDown(MotionEvent e) {
return false;
}
//Touch了還沒(méi)有滑動(dòng)時(shí)觸發(fā)
//(與onDown,onLongPress比較
//onDown只要Touch down一定立刻觸發(fā)。
public void onShowPress(MotionEvent e) {
}
//Touch了不移動(dòng)一直Touch down時(shí)觸發(fā)
//Touchdown后過(guò)一會(huì)沒(méi)有滑動(dòng)先觸發(fā)onShowPress再是onLongPress。
public void onLongPress(MotionEvent e) {
}
//上面這兩個(gè)函數(shù)都是在touch down后又沒(méi)有滑動(dòng)(onScroll),又沒(méi)有長(zhǎng)按(onLongPress),然后Touchup時(shí)觸發(fā)。
/**
* 點(diǎn)擊一下非常快的(不滑動(dòng))Touchup: onDown->onSingleTapUp->onSingleTapConfirmed
*
點(diǎn)擊一下稍微慢點(diǎn)的(不滑動(dòng))Touchup:onDown->onShowPress->onSingleTapUp->onSingleTapConfirmed
* 點(diǎn)擊longpress ,onScroll 時(shí) 不觸發(fā) onSingleTapUp
*/
public boolean onSingleTapUp(MotionEvent e) {
Log.i("onSingleTapUp", "onSingleTapUp");
return false;
}
//Touch了滑動(dòng)時(shí)觸發(fā)
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,
float distanceY) {
return true;
}
//Touch了滑動(dòng)一點(diǎn)距離后,up時(shí)觸發(fā)
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
float velocityY) {
return true;
}