1

我想完成一些我认为很简单但结果很麻烦的事情。

我有一个带有图片的加载屏幕,我希望它在应用程序加载时淡入淡出。我决定通过经常改变它相对于计数器正弦值的不透明度来实现这一点。我的代码如下:

ImageView   loadingRaven;   //loading raven at the start of the app
Timer       timer;          //timer that we're gonna have to use
int         elapsed = 0;    //elapsed time so far

/*
 * the following is in the onCreate() method after the ContentView has been set
 */

loadingRaven = (ImageView)findViewById(R.id.imageView1);


//fade the raven in and out
TimerTask task = new TimerTask()
{
    public void run()
    {
        elapsed++;

        //this line causes the app to fail
        loadingRaven.setAlpha((float)(Math.sin(elapsed)+1)/2);
    }
};
timer = new Timer();
timer.scheduleAtFixedRate(task, 0, 50);

导致我的程序失败的问题是什么?我是否正确使用了 Timer 和 TimerTask?或者是否有更好的方法来频繁更新图像的不透明度,以便顺利进出?

谢谢

4

1 回答 1

2

TimerTask 在不同的线程上运行。所以在主 ui 线程上更新 ui。使用runonuithread

      TimerTask task = new TimerTask()
      {
        public void run()
         {
          elapsed++;
              runOnUiThread(new Runnable() //run on ui thread
                 {
                  public void run() 
                  { 


                     loadingRaven.setAlpha((float)(Math.sin(elapsed)+1)/2)
                 }
                 });

     }
  };

TimerTask 在不同的线程上运行。您可以按照 pskink 的建议使用 Handler 和 postDelayed

于 2013-05-09T15:45:05.747 回答