帧动画
帧动画是将多张连续帧图片按照顺序依次播放,从而达到动画的效果。图片越多,动画越流畅。
public class MainActivity extends AppCompatActivity {
@BindView(R.id.btn_start)
Button btnStart;
@BindView(R.id.image)
ImageView image;
@BindView(R.id.btn_stop)
Button btnStop;
private AnimationDrawable animationDrawable;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ButterKnife.bind(this);
initAnimation();
initView();
}
private void initView() {
btnStart.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
start();
}
});
btnStop.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
stop();
}
});
}
//将帧动画素材添加到AnimationDrawable,并设置间隔时间
private void initAnimation() {
animationDrawable = new AnimationDrawable();
animationDrawable.addFrame(getResources().getDrawable(R.drawable.img1), 100);
animationDrawable.addFrame(getResources().getDrawable(R.drawable.img2), 100);
animationDrawable.addFrame(getResources().getDrawable(R.drawable.img3), 100);
animationDrawable.addFrame(getResources().getDrawable(R.drawable.img4), 100);
image.setBackground(animationDrawable);
}
//启动帧动画
public void start() {
//循环逐帧动画 false为循环
animationDrawable.setOneShot(false);
animationDrawable.start();
}
//暂停帧动画
private void stop() {
if (animationDrawable.isRunning()) {
animationDrawable.stop();
}
}
}
以上是第一种实现方式,通过java代码来动态添加帧动画,接下来我们可以将图片放在drawable下xml文件中,然后再再java代码中进行引用
<animation-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/img1" android:duration="100"/>
<item android:drawable="@drawable/img2" android:duration="100"/>
<item android:drawable="@drawable/img3" android:duration="100"/>
<item android:drawable="@drawable/img4" android:duration="100"/>
</animation-list>
java代码引用,修改initAnimation()方法
private void initAnimation() {
//xml资源引入
animationDrawable = (AnimationDrawable) getResources().getDrawable(R.drawable.yazi);
image.setBackground(animationDrawable);
}