当前位置: 首页 > 知识库问答 >
问题:

在Android中调用invalidate()时计时器不工作

梁勇
2023-03-14

我想通过绘制一条灰色、白色(与背景匹配)的路径,然后再绘制一条灰色的路径来创建闪烁效果。我想闪烁3次,显示灰色1秒,显示白色1秒,再次显示灰色1秒,以此类推。

当我为postDelayed()创建一个Handler时,程序跳过run(),没有在定时集中执行它,也没有发生闪烁:

final Handler handler = new Handler();
        handler.postDelayed(new Runnable() {
            @Override
            public void run() {
                invalidate(); //calls onDraw()
                Log.d(TAG, "Flashing now now");
            }
        }, 1000);

我如何使用计时器实现这样的闪烁功能,并将其闪烁3次?

谢谢!

共有2个答案

桂宏旷
2023-03-14

这是一个工作代码示例,演示了如何将地球仪从蓝色闪烁到红色,然后再闪烁回来。您可以修改内部的代码,以限制所需的次数和延迟时间。

protected MyGlobeFlasherHandler handlerFlashGlobe = new MyGlobeFlasherHandler(this);

@Override
protected onCreate(Bundle bundle) { 
       handlerFlashGlobe.sendEmptyMessageDelayed(0, 700);
}

/**
 * private static handler so there are no leaked activities.
 */
protected static class MyGlobeFlasherHandler extends Handler {


        private final WeakReference<HomeBase> activity;

        public MyGlobeFlasherHandler(HomeBase activity) {
            this.activity = new WeakReference<HomeBase>(activity);
        }

    @Override
    public void handleMessage(Message msg) {
        super.handleMessage(msg);

        if (activity.get() != null) {
            if (activity.get().shadedGlobe) {
                activity.get().imgData.setImageDrawable(activity.get().getResources().getDrawable(R.drawable.globe_blue));
            } else {
                activity.get().imgData.setImageDrawable(activity.get().getResources().getDrawable(R.drawable.globe_red));
            }

            activity.get().shadedGlobe = !activity.get().shadedGlobe;

            sendEmptyMessageDelayed(0, 700);
        }
    }

}
楚灿
2023-03-14

你可以试试这样的,

int delay = 5000; // delay for 5 sec.

int period = 1000; // repeat every sec.

Timer timer = new Timer();

timer.scheduleAtFixedRate(new TimerTask() {

public void run() {

System.out.println("done}

}, delay, period);

否则,你还有很多其他的例子可以遵循,比如例子1、例子2、例子3等等。如果你还需要帮助,请告诉我。

 类似资料:
  • Hi plan to development and android countdown timer app for the activity with start and stop button when user click start button display timer countdown and user go to remaining activities when the tim

  • 我有一个应用程序,有两个定时器开始他们的按钮点击。 当它们开始时,计时器倒计时显示在文本视图中,因此用户可以看到倒计时(10,9,8,7等) 一个计数器是45秒计时器,另一个是30秒计时器。我注意到,当计时器启动时,它们会以两种方式之一运行:计时器倒计时显示从正确的时间开始的秒数(然后跳过一个)45、43、42、41等,或者其他时间不显示开始值,直接跳到(44、43、42、41等),并且不会跳过任

  • 问题内容: 我计划使用计时器创建间隔应用程序。它应该只是最基础的,所以在我理解了基础知识之后,我将不得不添加更多内容。我要实现的是选择一个间隔应持续的分钟数,但该间隔应持续多少次。就像持续1分钟并持续8次的间隔。问题是最好使用哪个计时器?我在Android Countdown Timer上尝试过它,它似乎可以正常工作。但是还有另一个更好的吗? 问题答案: 我总是建议使用。 它比内置类要花更多的工作

  • 我有两个XML EditTexts。在一个EditText中,用户可以将一个数字作为分钟,在另一个EditText中,可以将一个数字作为秒。单击finish按钮后,seconds EditText应开始倒计时,并每秒更新其文本。 此外,我如何保持更新,直到它达到零分钟零秒?

  • 我尝试创建一个自定义的时间流逝时间,一旦我按住音量键,它就会启动计时器,并假设时间必须在我松开键后停止,但我松开键时遇到问题,计时器仍在移动。请告诉我我错过了什么谢谢 公共布尔onKeyDown(int-keyCode,KeyEvent-event){if((keyCode==KeyEvent.keyCode_-VOLUME_-DOWN

  • 问题内容: 这是我的第一篇文章.. 因此,我正在学习Android和Java(来自Actionscript),并且正在从事以下项目: 我试图单击一个ImageView,让该ImageView交换图像一秒钟,然后返回到原始图像。(这是针对窃听游戏的) 听起来很容易,对吧?我花了整整一天的时间试图让一个标准的Java Timer / TimerTask工作..没有运气.. 有没有更好的办法?我的意思是