Android 在任一手势上或 5 秒后更新 UI

Android update UI on either gesture or after 5 seconds

我是 Android 的新手。我想在收到手势时或 5 秒后更新 UI (GestureOverlayView)。 我正在使用-

public void onGesturePerformed(GestureOverlayView overlay, Gesture gesture) {
    updateMyScreen();
}

这对更新屏幕非常有效,但我希望另一个线程保持时间(并且在 5000 毫秒之后)将在用户不输入手势时触发此更新。 我需要使用处理程序吗?我不知道如何处理这个问题。谢谢

您可以通过多种方式添加 5000 毫秒计时器,但其中之一是创建一个 Handler 和 post 一个 Runnable 将其作为延迟事件,如以下代码所示:

 Handler handler = new Handler();
 handler.postDelayed(new Runnable() {
    @Override
    public void run() {
        if(!updated) {
            updateMyScreen();
        }
    }
 }, 5000);

然后你可以定义一个布尔值 updated 来保持屏幕是否已经更新的状态

boolean updated;

然后在onGesturePerformed中添加类似的检查

public void onGesturePerformed(GestureOverlayView overlay, Gesture gesture) {
    if(!updated) {
        updateMyScreen();
    }
}

最后在 updateMyScreen 方法中设置更新为 true;

void updateMyScreen() {
    //..
    updated = true;

}

您不必使用处理程序,您可以使用任何视图 post Runnable
我会给你一个想法,但你必须添加条件是否在 5 秒后更新屏幕等:

public void onGesturePerformed(GestureOverlayView overlay, Gesture gesture) {
        updateMyScreen();

        overlay.postDelayed(new Runnable() {
                @Override
                public void run() {
                   updateMyScreen();
                }
            }, 5000);
    }

在这个小例子中,您更新了两次屏幕 - 一次是在执行手势时,另一次是在 5 秒后。其他逻辑由你决定:)

试试这个:

Handler handler = new Handler();
        handler.postDelayed(new Runnable() {
            @Override
            public void run() {
                /*add your code here which code refresh every 5 seconds*/
            }
        }, 5000);