动画合集之帧动画

2020-09-18  本文已影响0人  巫师Android

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

上一篇下一篇

猜你喜欢

热点阅读