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