把昨天想寫的先補了,手勢監聽(爲dialog的顯示設置手勢觸發——左滑滑出dialog)
1.手勢監聽探測器
2.重寫手勢的監聽事件
3.爲界面配置監聽事件
======================================================================================
手勢監聽
======================================================================================
1.重寫手勢探測器類,設置監聽到手勢後觸發事件
private static final int FLING_MIN_DISTANCE = 90;//移動最小距離
private static final int FLING_MIN_VELOCITY = 150;//移動最大速度
class ViewGestureListener implements OnGestureListener {
// 用戶輕觸觸摸屏,由1個MotionEvent ACTION_DOWN觸發
public boolean onDown(MotionEvent e) {
return false;
}
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
// e1:第1個ACTION_DOWN MotionEvent
// e2:最後一個ACTION_MOVE MotionEvent
// velocityX:X軸上的移動速度(像素/秒)
// velocityY:Y軸上的移動速度(像素/秒)
// X軸的座標位移大於FLING_MIN_DISTANCE,且移動速度大於FLING_MIN_VELOCITY個像素/秒
//向有翻圖片
if (e1.getX() - e2.getX() > FLING_MIN_DISTANCE
&& Math.abs(velocityX) > FLING_MIN_VELOCITY) {
// FIXME:dialog is null ?
dialog.show();
}
//向左翻圖片
if (e2.getX() - e1.getX() > FLING_MIN_DISTANCE
&& Math.abs(velocityX) > FLING_MIN_VELOCITY) {
//FIXME:dialog is null ?
dialog.dismiss();
}
return false;
}
// 用戶長按觸摸屏,由多個MotionEvent ACTION_DOWN觸發
public void onLongPress(MotionEvent e) {
}
// 用戶按下觸摸屏,並拖動,由1個MotionEvent ACTION_DOWN, 多個ACTION_MOVE觸發
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
return false;
}
// 用戶輕觸觸摸屏,尚未鬆開或拖動,由一個1個MotionEvent ACTION_DOWN觸發
// 注意和onDown()的區別,強調的是沒有鬆開或者拖動的狀態
public void onShowPress(MotionEvent e) {
}
// 用戶(輕觸觸摸屏後)鬆開,由一個1個MotionEvent ACTION_UP觸發
public boolean onSingleTapUp(MotionEvent e) {
return false;
}
}
2.聲明創建手勢探測器對象
dialogGesture = new GestureDetector(this, new ViewGestureListener());
3.爲當前Activity設置手勢監聽
public boolean onTouchEvent(MotionEvent event) {
return dialogGesture.onTouchEvent(event);
}
4.(可選)其實到3步基本上手勢監聽就全部處理完成了,但是對於部分控件如GridView會因爲其中含有scrollView造成整體的手勢監聽失效,對於這樣的情況可以考慮重新設置GridView的手勢監聽,這樣就可以在這些控件上完成這些的手勢監聽工作了。
整體工程代碼地址稍後給出點擊打開鏈接