Android:AnimationDrawable不能与Runnable一起使用

时间:2014-06-23 15:37:21

标签: android runnable android-handler

public class MainActivity extends Activity{
   public static Runnable StartRun;
   private ImageView Player;

   protected void onCreate(){
   ...
   Player = (ImageView) findViewById(R.id.imgStart);
   StartRun = new Runnable(){
        @Override
        public void run() {

            Player.setBackgroundResource(R.drawable.loadanimation); //XML animationlist
            AnimationDrawable frameanimation = (AnimationDrawable)
                                            Player.getBackground();
            frameanimation.start(); 

        }
    };
  }

}


public class RadioPlayer extends Service{
    Handler handle;

     public void onCreate(){
         handle = new Handler();
     }

public int onStartCommand(Intent intent, int flags, int startId) {
    handle.post(MainActivity.StartRun);

    if (intent.getBooleanExtra(ACTION_PLAY, false)) {
        play();
    }
    return Service.START_STICKY;
}
 }

我已经在onCreate()中直接测试了代码的AnimationDrawable部分,所以它确实有效。 我已经使用Logcat确认StartRun,run()被调用,&我也试图从方法内部定义imageview,因为不要像目前那样使用全局。

仍然没有雪茄。有人可以帮忙吗?

更新: 似乎存在一个潜在的问题,即将此问题归结为错误。我已经在runnable线程之外成功执行了animationDrawable代码,即直接在活动上(证明动画确实有效,但对我自己来说是不切实际的),我尝试使用localbroadcastReceiver,以及处理程序等 没有这些非直接活动方法是成功的,我完全没有想法。

由于时间不够,我只想用一个简单的progressdialog替换帧动画代码。它在某种程度上达到了目的,但它是一个需要在几个月内再次解决的生产解决方案。如果有人有同样的问题并且可以阐明这个问题,请发表评论/发表

1 个答案:

答案 0 :(得分:0)

我认为您应该在onWindowFocusChanged方法上开始动画,因为它是了解活动是否对用户可见的最佳位置。代码中的runnable仅用于显示我假设的动画。这样的事情应该有效:

public void onWindowFocusChanged(boolean hasFocus) {    
super.onWindowFocusChanged(hasFocus);         
if (hasFocus)
{
   Player.setBackgroundResource(R.drawable.loadanimation); //XML animationlist
   AnimationDrawable frameanimation = (AnimationDrawable) Player.getBackground();
   frameanimation.start();
  }

 }