Android 动画 之 FrameAnimation

 

FrameAnimation 动画概述

        FrameAnimation 又叫 DrawableAnimation 中文名叫 逐帧动画(Frame by Frame)。他能实现像幻灯片,放电影一样复杂的动画效果,灵活性非常强,几乎可以实现你想要的效果。

FrameAnimation 实现

       逐帧动画有两种实现方式 xml  和java 这里推荐使用 xml ,使用起来方便。

      1 xml 实现方式:

    对于资源文件 一般都会放在res/目录下,逐帧动画需要Drawable 资源,所以我们自定义的xml  应该放在Drawable 目录下,示例如下:

<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
    android:oneshot=["true" | "false"] >
    <item
        android:drawable="@[package:]drawable/drawable_resource_name"
        android:duration="integer" />
</animation-list>

      animation-list 是根目录,包含一个或者多个item 。包含属性 oneshot ,true 代表只播放一次,false 代表可以循环播放。

    示例:

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


    android:oneshot="false">  <!--这里循环播放-->
    <item android:drawable="@mipmap/ic_volume_1" android:duration="350" />
    <item android:drawable="@mipmap/ic_volume_2" android:duration="350" />
    <item android:drawable="@mipmap/ic_volume_3" android:duration="350" />
    <item android:drawable="@mipmap/ic_volume_4" android:duration="350" />
    <item android:drawable="@mipmap/ic_volume_5" android:duration="350" />
    <item android:drawable="@mipmap/ic_volume_6" android:duration="350" />
    <item android:drawable="@mipmap/ic_volume_7" android:duration="350" />
    <item android:drawable="@mipmap/ic_volume_8" android:duration="350" />


</animation-list>

使用:

  AnimationDrawable frameAnim = (AnimationDrawable)getResources().getDrawable(R.drawable.image_animation);
        imageView.setBackgroundDrawable(frameAnim);
        //frameAnim.setOneShot(true);
        frameAnim.start();

这样动画 就能展示出来了。

2 java 实现方式(不推荐)

    java 通过 AnimationDrawable addFrame 方法把资源一个一个加进去:

       frameAnim =new AnimationDrawable();
        // 为AnimationDrawable添加动画帧
        frameAnim.addFrame(getResources().getDrawable(R.mipmap.ic_volume_1), 400);
        frameAnim.addFrame(getResources().getDrawable(R.mipmap.ic_volume_2), 300);
        frameAnim.addFrame(getResources().getDrawable(R.mipmap.ic_volume_3), 200);
        frameAnim.addFrame(getResources().getDrawable(R.mipmap.ic_volume_4), 400);
        frameAnim.addFrame(getResources().getDrawable(R.mipmap.ic_volume_5), 300);
        frameAnim.addFrame(getResources().getDrawable(R.mipmap.ic_volume_6), 200);
        frameAnim.addFrame(getResources().getDrawable(R.mipmap.ic_volume_7), 100);
        frameAnim.addFrame(getResources().getDrawable(R.mipmap.ic_volume_8), 400);
        frameAnim.setOneShot(false);
        frameAnim.start();

这种方式并不推荐使用。

FrameAnimation 示例

演示一个录音的动画效果,静态图如下所示:

录音

布局文件:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@android:color/transparent"
    android:orientation="vertical">

    <RelativeLayout
        android:layout_width="186dp"
        android:layout_height="186dp"
        android:layout_gravity="center"
        android:background="@drawable/bg_voice_popup"
        android:gravity="center"
        android:orientation="vertical">

        <ImageView
            android:id="@+id/rc_audio_state_image"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerHorizontal="true"
            android:layout_marginBottom="11dp"
            android:layout_marginLeft="41dp"
            android:layout_marginRight="41dp"
            android:layout_marginTop="20dp" />

        <TextView
            android:id="@+id/rc_audio_timer"
            android:layout_width="105dp"
            android:layout_height="105dp"
            android:layout_centerHorizontal="true"
            android:layout_marginBottom="11dp"
            android:layout_marginLeft="41dp"
            android:layout_marginRight="41dp"
            android:layout_marginTop="20dp"
            android:gravity="center"
            android:textColor="@android:color/white"
            android:textSize="70sp"
            android:text="10"
            android:visibility="invisible" />

        <TextView
            android:id="@+id/rc_audio_state_text"
            android:layout_width="160dp"
            android:layout_height="40dp"
            android:layout_alignParentBottom="true"
            android:layout_gravity="center"
            android:layout_marginBottom="11dp"
            android:layout_marginLeft="14dp"
            android:layout_marginRight="14dp"
            android:layout_marginTop="11dp"
            android:gravity="center"
            android:textColor="@android:color/white"
            android:textSize="15sp" />
    </RelativeLayout>
</FrameLayout>

资源文件 :

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


    android:oneshot="false">  <!--这里循环播放-->
    <item android:drawable="@mipmap/ic_volume_1" android:duration="350" />
    <item android:drawable="@mipmap/ic_volume_2" android:duration="350" />
    <item android:drawable="@mipmap/ic_volume_3" android:duration="350" />
    <item android:drawable="@mipmap/ic_volume_4" android:duration="350" />
    <item android:drawable="@mipmap/ic_volume_5" android:duration="350" />
    <item android:drawable="@mipmap/ic_volume_6" android:duration="350" />
    <item android:drawable="@mipmap/ic_volume_7" android:duration="350" />
    <item android:drawable="@mipmap/ic_volume_8" android:duration="350" />


</animation-list>

最后附上 资源打包:

我的下载

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值