• Android笔记(六十三) android中的动画——逐帧动画( frame-by-frame animation)


          就好像演电影一样,播放实现准备好的图片,来实现动画效果。

          逐帧动画需要用到AnimationDrawable类,该类主要用于创建一个逐帧动画,然后我们把这个动画设置为view的背景即可。

          android提供两种方法为AnimationDrawable添加帧:XML定义和JAVA代码创建。

    XML

          因为动画帧的资源需要是一个Drawable对象,所以需要把它放到Drawable目录下。在<animation-list>使用<item>来添加一帧

    anima.xml

    <?xml version="1.0" encoding="utf-8"?>
    <animation-list xmlns:android="http://schemas.android.com/apk/res/android"
        android:oneshot="false" >
    
        <item
            android:drawable="@drawable/a"
            android:duration="100"/>
        <item
            android:drawable="@drawable/b"
            android:duration="100"/>
        <item
            android:drawable="@drawable/c"
            android:duration="100"/>
        <item
            android:drawable="@drawable/d"
            android:duration="100"/>
        <item
            android:drawable="@drawable/e"
            android:duration="100"/>
    
    </animation-list>

    MainActivity.java

    package cn.lixyz.animator;
    
    import android.annotation.SuppressLint;
    import android.app.Activity;
    import android.graphics.drawable.AnimationDrawable;
    import android.os.Bundle;
    import android.widget.ImageView;
    
    @SuppressLint("NewApi")
    public class MainActivity extends Activity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            ImageView iv = (ImageView) findViewById(R.id.image);
            AnimationDrawable ad = new AnimationDrawable();
            ad = (AnimationDrawable) getResources().getDrawable(R.drawable.anima);
            iv.setBackground(ad);
            ad.start();
    
        }
    }

    JAVA

          在Android中,除了可以通过XML文件定义一个逐帧动画之外,还可以通过AnimationDrawable.addFrame()方法为AnimationDrawable添加动画帧

    package cn.lixyz.animator;
    
    import android.annotation.SuppressLint;
    import android.app.Activity;
    import android.graphics.drawable.AnimationDrawable;
    import android.os.Bundle;
    import android.widget.ImageView;
    
    @SuppressLint("NewApi")
    public class MainActivity extends Activity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            ImageView iv = (ImageView) findViewById(R.id.image);
            AnimationDrawable ad = new AnimationDrawable();
            ad.addFrame(getResources().getDrawable(R.drawable.a), 500);
            ad.addFrame(getResources().getDrawable(R.drawable.b), 500);
            ad.addFrame(getResources().getDrawable(R.drawable.c), 500);
            ad.addFrame(getResources().getDrawable(R.drawable.d), 500);
            ad.addFrame(getResources().getDrawable(R.drawable.e), 500);
    
            ad.setOneShot(false);
    
            iv.setBackground(ad);
            ad.start();
    
    
        }
    }

          

    常用方法

          AnimationDrawable还有一些其他的方法:

          void start():开始播放逐帧动画。

          void stop():停止播放逐帧动画。

          void addFrame(Drawable frame,int duration):为AnimationDrawable添加一帧,并设置持续时间。

          int getDuration(int i):得到指定index的帧的持续时间。

          Drawable getFrame(int index):得到指定index的帧Drawable。

          int getNumberOfFrames():得到当前AnimationDrawable的所有帧数量。

          boolean isOneShot():当前AnimationDrawable是否执行一次,返回true执行一次,false循环播放。

          boolean isRunning():当前AnimationDrawable是否正在播放。

          void setOneShot(boolean oneShot):设置AnimationDrawable是否执行一次,true执行一次,false循环播放

  • 相关阅读:
    jquery的全选,全不选,反选
    jquery中的on方法绑定动态元素
    IIS服务器不能下载.apk文件的解决方略
    14:堆和堆排序
    虚拟内存
    leetcode28:实现strStr()
    leetcode387:字符串中的第一个唯一字符
    leetcode344:反转字符串
    leetcode198:打家劫舍
    leetcode64:最小路径和
  • 原文地址:https://www.cnblogs.com/xs104/p/5067430.html
Copyright © 2020-2023  润新知