处理程序删除回调,并再次投入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

回到顶部