处理程序删除回调,并再次投入ACTION_UP
我想调用函数(如果用户未触及另一个视图10秒,关闭一个小部件)。 可触摸的观点有听众喜欢处理程序删除回调,并再次投入ACTION_UP
@Override public boolean onTouchEvent(MotionEvent event) {
int x = (int) event.getX();
int y = (int) event.getY();
switch (event.getAction()) {
case MotionEvent.ACTION_MOVE:
if(handler != null){
handler.removeCallbacksAndMessages(null);
handler = null;
}
break;
case MotionEvent.ACTION_DOWN:
if(handler != null){
handler.removeCallbacksAndMessages(null);
handler = null;
}
break;
case MotionEvent.ACTION_UP:
startTime = Calendar.getInstance().get(
Calendar.MILLISECOND);
handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
isMenuVisible = false;
postInvalidate();
}
}, startTime + EXPANDED_PERIOD);
break;
}
return true;
}
我曾尝试也只有一个成员处理程序,并避免创建起来。想法是当用户做出行动等待10秒,如果不再触摸然后关闭。 但它不关闭。当我在ACTION_DOWN和ACTION_MOVE中移除时,即使我触摸视图,移除它也会关闭。如何解决这个问题?
回答:
你不应该在postDelayed添加开始时间()
Read doc here.
使用下面的代码来代替。
handler.postDelayed(***, EXPANDED_PERIOD);
以上是 处理程序删除回调,并再次投入ACTION_UP 的全部内容, 来源链接: utcz.com/qa/262078.html