经测试,应该是3.0一下的机型在播放animation-lis时,动画没有播放;然后网络搜索,找到一篇文章,讲的非常详细http://www.cnblogs.com/firecode/archive/2012/11/01/2749774.html
里面给出了几种执行动画的方法,我这边就再重复一下:
首先提一点需要注意:
1》ImageView的src与background有什么区别呢?
用src的时候,应是原图显示,不该变图片的大小;用background的时候,按照组件的大小来放大或者缩小图片。
2》代码中使用setBackgroundResource方法设置imageView资源背景,相当于布局文件中的android:background属性,这个属性是view类的属性,必须通过getBackground()方法来获取;而getdrawable()是imageview类的方法,必须通过在代码中setImageResource(int)(对应布局文件的android:src)或setImageDrawable(Drawable drawable)方法设置才可以使用getdrawable()方法;否则程序中代码虽然不会出错,但是运行后会报空指针异常!!!
方法 1
<ImageView android:id="@+id/splash_iv" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="55dp" android:src="@drawable/explosiontext" /> iv = (ImageView) findViewById(R.id.splash_iv); anim = (AnimationDrawable) iv.getDrawable(); iv.post(new Runnable() { @Override public void run() { anim.start(); } });
方法 2
// @Override // public void onWindowFocusChanged(boolean hasFocus) { // anim.start(); // super.onWindowFocusChanged(hasFocus); // }
方法 3
iv = (ImageView) findViewById(R.id.splash_iv); anim = (AnimationDrawable) iv.getDrawable(); iv.getViewTreeObserver().addOnPreDrawListener(preDrawListener); OnPreDrawListener preDrawListener = new OnPreDrawListener() { @Override public boolean onPreDraw() { anim.start(); return true; // 必须要有这个true返回 } };
方法 4
imageView.setBackgroundResource(R.anim.xxxxx); AnimationDrawable animationDrawable = (AnimationDrawable) imageView.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 ""; } }