项目开发用到了AnimationDrawable,调用start后没有运行,很纳闷。google搜了下。记录一下。
这个AnimationDrawable.start不能直接写在onClick,onStart,onResume里面,是无效的,无法启动动画,只能写在比如事件监听当中。
以下有几种运行AnimationDrawable的方式。
第一种:在事件监听中start AnimationDrawable 下面一个例子举例 当一个视图树将要绘制时产生事件
- AnimationDrawable ad;
- ImageView iv = (ImageView) findViewById(R.id.animation_view);
- iv.setBackgroundResource(R.drawable.animation);
- ad = (AnimationDrawable) iv.getBackground();
- iv.getViewTreeObserver().addOnPreDrawListener(opdl);
- OnPreDrawListener opdl=new OnPreDrawListener(){
- @Override
- public boolean onPreDraw() {
- ad.start();
- return true; //注意此行返回的值
- }
- };
第二种方式启动动画:(在Activity启动时会自动运行动画)
- ImageView image = (ImageView) findViewById(R.id.animation_view);
- image.setBackgroundResource(R.anim.oldsheep_wait);
- animationDrawable = (AnimationDrawable) image.getBackground();
- RunAnim runAnim=new RunAnim();
- runAnim.execute("");
- class RunAnim extends AsyncTask<String, String, String>
- {
- @Override
- protected String doInBackground(String... params)
- {
- if (!animationDrawable.isRunning())
- {
- animationDrawable.stop();
- animationDrawable.start();
- }
- return "";
- }
- }
第三种方式启动动画:(在Activity启动时会自动运行动画)
- ImageView image = (ImageView) findViewById(R.id.animation_view);
- image.setBackgroundResource(R.anim.oldsheep_wait);
- animationDrawable = (AnimationDrawable) image.getBackground();
- image.post(new Runnable()
- {
- @Override
- public void run()
- {
- animationDrawable.start();
- }
- });
第四种方式启动动画:(在Activity启动时会自动运行动画)
- ImageView image = (ImageView) findViewById(R.id.animation_view);
- image.setBackgroundResource(R.anim.oldsheep_wait);
- animationDrawable = (AnimationDrawable) image.getBackground();
- @Override
- public void onWindowFocusChanged(boolean hasFocus)
- {
- animationDrawable.start();
- super.onWindowFocusChanged(hasFocus);
- }