前言:
今天在做一個功能,就是在畫中畫桌面顯示時既可以拖動邊框隨意移動,也可以點擊畫中畫顯示播放.暫停.關閉.全屏按鈕並進行操作的功能。這是需要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;
}