onClick 與 onTouch 事件的互斥問題

前言:

  今天在做一個功能,就是在畫中畫桌面顯示時既可以拖動邊框隨意移動,也可以點擊畫中畫顯示播放.暫停.關閉.全屏按鈕並進行操作的功能。這是需要onClick事件和onTouch時間都要監聽,但是實際中發現當我執行代碼的時候只執行了onTouch的功能,卻沒有執行onClick的功能。

  於是網上查找了一些資料,說onTouch返回true時可以執行到onclick事件,試了一下,發現是執行完onTouch事件後纔會執行onClick事件(PS:之前返回false時不執行onClick事件),還是達不到預期的效果。

  然後又繼續查找資料,瞭解到onClick時間是在onTouch事件中執行的,相當於子類的關係。於是就有了思路:

      在onTouch事件中MotionEvent.ACTION_DOWN時記錄一個時間,MotionEvent.ACTION_UP時再記錄一個時間;然後計算這個時間差值X。如果X小於預先設定的一個定置,則在MotionEvent.ACTION_UP中執行onClick的操作,並且返回true。如果X大於預先設定的值則繼續執行onTouch事件。

以下爲詳細實例操作:

private OnTouchListener mfadeTouchListener = new OnTouchListener() {
		@Override
		public boolean onTouch(View v, MotionEvent event) {
			mHandler.removeMessages(0);
			x = event.getRawX();
			y = event.getRawY() - 38;
			switch (event.getAction()) {
			case MotionEvent.ACTION_DOWN:
				 s = event.getEventTime();
				break;
			case MotionEvent.ACTION_MOVE:
				updateVideoFadePosition();
				break;
			case MotionEvent.ACTION_UP:
				long ss = event.getEventTime();
				if(ss - s < 150){	
				play_btn.setOnClickListener(new OnClickListener() {
						@Override
						public void onClick(View v) {
								
							}
						}
					});
				closeBtn.setOnClickListener(new OnClickListener() {
						@Override
						public void onClick(View v) {
							
						}
					});
					mHandler.sendEmptyMessageDelayed(0, 3000);
					return true;
				}
				
				updateVideoFadePosition();			
				Util.ChangeDispWin(mScaFb, wmParams.x, wmParams.y,  wmParams.width,wmParams.height);
				break;
			}






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