1、概念
帧动画是由N张静态图片依次显示而产生的。
2、用法
要实现帧动画,需要用到AnimationDrawable类。
3、示例:
效果图:
帧动画展示
实现步骤:
1)在drawable中,创建frame_animation.xml。
<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
android:oneshot="false">
<!-- onshot:是否只播放一次-->
<item android:drawable="@drawable/p1" android:duration="1000"/>
<item android:drawable="@drawable/p2" android:duration="1000"/>
</animation-list>
oneshot:表示是否只播放一次,若是,动画会停在最后一帧
2)将其设置为ImageView的background。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<Button
android:id="@+id/btn_start"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="开始" />
<Button
android:id="@+id/btn_stop"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="停止" />
<ImageView
android:id="@+id/img_show"
android:layout_width="120dp"
android:layout_height="120dp"
android:layout_gravity="center"
android:background="@drawable/frame_animation" />
</LinearLayout>
3)在MainActivity中获取、启动动画。
public class FrameAnimationActivity extends AppCompatActivity implements View.OnClickListener {
private Button btnStart, btnStop;
private ImageView imgShowFrame;
private AnimationDrawable anim;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_frame_animation);
initViews();
anim = (AnimationDrawable) imgShowFrame.getBackground();
}
private void initViews() {
btnStart = findViewById(R.id.btn_start);
btnStop = findViewById(R.id.btn_stop);
btnStart.setOnClickListener(this);
btnStop.setOnClickListener(this);
imgShowFrame = findViewById(R.id.img_show_frame);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn_start:
anim.start();
break;
case R.id.btn_stop:
anim.stop();
break;
default:
}
}
}
拓展:
帧动画优化:https://github.com/ansen360/FrameAnimation
写于:2020/09/18
网友评论