处理程序删除回调并再次放入ACTION_UP

时间:2013-12-17 01:23:18

标签: java android

我想调用函数(如果用户没有触摸另一个视图10秒钟,则关闭一个小部件)。 可触摸视图有听众喜欢

@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中删除时,即使我触摸视图也会将其关闭。怎么解决这个问题?

1 个答案:

答案 0 :(得分:1)

您不应在postDelayed()

中添加startTime

Read doc here.

使用以下代码。

handler.postDelayed(***, EXPANDED_PERIOD);