zoukankan      html  css  js  c++  java
  • 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循环播放

  • 相关阅读:
    hdu 1455 N个短木棒 拼成长度相等的几根长木棒 (DFS)
    hdu 1181 以b开头m结尾的咒语 (DFS)
    hdu 1258 从n个数中找和为t的组合 (DFS)
    hdu 4707 仓鼠 记录深度 (BFS)
    LightOJ 1140 How Many Zeroes? (数位DP)
    HDU 3709 Balanced Number (数位DP)
    HDU 3652 B-number (数位DP)
    HDU 5900 QSC and Master (区间DP)
    HDU 5901 Count primes (模板题)
    CodeForces 712C Memory and De-Evolution (贪心+暴力)
  • 原文地址:https://www.cnblogs.com/xs104/p/5067430.html
Copyright © 2011-2022 走看看