0

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

当我创建一个HandlerforpostDelayed()时,程序跳过了 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 次?

谢谢!

4

2 回答 2

2

你可以试试这样的

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等。如果您仍然需要帮助,请告诉我。

于 2016-04-18T22:02:47.630 回答
0

这是一个工作代码示例,说明了我们如何将地球仪从蓝色闪烁到红色并再次闪烁。你可以修改里面的代码来限制你想要的次数和时间延迟。

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);
        }
    }

}
于 2016-04-18T22:46:43.267 回答