【多級樹形菜單-dialog自定義動畫彈出方式-手勢監聽】手勢監聽

把昨天想寫的先補了,手勢監聽(爲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的手勢監聽,這樣就可以在這些控件上完成這些的手勢監聽工作了。


整體工程代碼地址稍後給出點擊打開鏈接








發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章