本文是基于如下代码的详细操作与理解
res/drawable/anim_t.xml
<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
android:oneshot="true">
<item android:drawable="@drawable/idp" android:duration="300"/>
<item android:drawable="@drawable/idq" android:duration="300"/>
<item android:drawable="@drawable/idr" android:duration="300"/>
<item android:drawable="@drawable/ids" android:duration="300"/>
<item android:drawable="@drawable/idt" android:duration="300"/>
<item android:drawable="@android:color/transparent" android:duration="300"/>
</animation-list>
1.建立drawable的资源文件
在res上右键,新建Android resource file文件,在其中的选项中选择drawable
{对于animation-list的使用便是如此}
2.相关属性的含义
<item/> 表示的是一帧,上面的代码中有6个item,表示有6帧
Android:oneshot 如果为true则表示播放一次,并且在最后一帧下停止,如果为false这表示循环播放,如上面的代码所示,每个item中加载了一个图片(图片在drawable下),true表示从第一个item中开始显示,直到最后一个便停止。
android:duration 表示持续的时间,见上面的代码,表示前面所加载的图片持续的时间(以毫秒为单位)
android:color/transparent 设置颜色为透明
3.使用
在xml文件中加入一个ImageView,在Java中如下设置
import android.app.Activity;
import android.graphics.drawable.AnimationDrawable;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
public class MainActivity extends Activity implements View.OnClickListener {
private AnimationDrawable animationDrawable;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ImageView imageView=(ImageView)findViewById(R.id.image);
imageView.setImageResource(R.drawable.anim_t);
animationDrawable=(AnimationDrawable)imageView.getDrawable();
Button button=(Button)findViewById(R.id.button);
button.setOnClickListener(this);
}
@Override
public void onClick(View v) {
animationDrawable.start();
}
}
获取imageView,设置其资源为anim_t,使用AnimationDrawable来获取imageView的drawable资源,并操作
因为不能再onCreate中使用,故在点击事件中执行
4.对此代码分析中涉及到的其他问题
(1)聚焦问题
对于下面的一句话不是很理解,参考(1)中的
“动画的 start() 方法不能在 Activity 的 onCreate(Bundle savedInstanceState) 方法中执行,这是因为动画还没有完全的填充到窗口上。如果你想立即执行动画而不需要和用户进行交互,那么你可以在 Activity 的 onWindowFocusChanged() 方法中来调用 start() 方法。这样当你的应用在获得窗口焦点的时候 start() 就会马上被调用”
(2)imageView.setImageDrawable()和imageView.setImageResource()区别
一个是drawable,一个是id
见http://jingyan.baidu.com/article/6525d4b1332117ac7d2e9433.html
附:参考
(1)http://www.cnblogs.com/sunzn/archive/2013/01/27/2878385.html