zl程序教程

您现在的位置是:首页 >  移动开发

当前栏目

Android 帧动画 (一)

2023-09-14 09:04:24 时间

效果图:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
帧动画的原理时什么?

把图片资源顺次排列,每张图片代表一帧,然后依次播放显示出来,实现人眼看到的动画效果。帧动画通过标签定义,然后在 Android 代码中把它设置给显示组件作为背景或者数据源,如 ImageView 的背景等,最后由 AnimationDrawable 提供的 start() 等方法进行播放控制。

自定义并实现一个帧动画,先在 res / drawable 新建 franeni.xml

<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android">

    <!--第一个是放入资源的uri-->
    <!--第二个是播放的时间,1000为1秒-->

    <item
        android:drawable="@drawable/ic_one"
        android:duration="1000"/>

    <item
        android:drawable="@drawable/ic_two"
        android:duration="1000"/>

    <item
        android:drawable="@drawable/ic_three"
        android:duration="1000"/>

    <item
        android:drawable="@drawable/ic_four"
        android:duration="1000"/>

    <item
        android:drawable="@drawable/ic_five"
        android:duration="1000"/>

</animation-list>

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

	    <!--将背景设置为自定义放入资源的xml文件夹-->
    <ImageView
        android:id="@+id/img_view"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@drawable/franeani"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintBottom_toBottomOf="parent"/>

</android.support.constraint.ConstraintLayout>

MainActivity.java

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //  得到 ImageView 对象
        ImageView imageView = findViewById(R.id.img_view);

        //  AnimationDrawable 实例化逐帧动画对象
        AnimationDrawable frameAni = (AnimationDrawable) imageView.getBackground();
        //  启动动画
        frameAni.start();
        /**
         *      另外 AnimationDrawable  还提供了其它一些进行动画播放控制的方法
         *      public void stop() 停止播放动画
         *      public boolean isRunning() 判断当前动画是否处于播放状态
         *      public int getNumberOfFragmes() 获取总的帧数
         *      public Drawable getFrame(int index),获取 index 索引位置的帧图片对象
         */
    }
}

总结:

   
 *      另外 AnimationDrawable  还提供了其它一些进行动画播放控制的方法:
 * 
 * 		public void start() 播放动画
 *      public void stop() 停止播放动画
 *      public boolean isRunning() 判断当前动画是否处于播放状态
 *      public int getNumberOfFragmes() 获取总的帧数
 *      public Drawable getFrame(int index),获取 index 索引位置的帧图片对象