Android AnimationDrawable运作的几种方式

Android AnimationDrawable运行的几种方式项目开发用到了AnimationDrawable,调用start后没有运行,很纳闷。g

Android AnimationDrawable运行的几种方式

项目开发用到了AnimationDrawable,调用start后没有运行,很纳闷。google搜了下。记录一下。?

这个AnimationDrawable.start不能直接写在onClick,onStart,onResume里面,是无效的,无法启动动画,只能写在比如事件监听当中。?

???

以下有几种运行AnimationDrawable的方式。?

第一种:在事件监听中start?AnimationDrawable?下面一个例子举例?当一个视图树将要绘制时产生事件?

[java]?view?plaincopy?

????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启动时会自动运行动画)?

[java]?view?plaincopy?

????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启动时会自动运行动画)?

[java]?view?plaincopy?

????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启动时会自动运行动画)?

[java]?view?plaincopy?

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