前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >Android实现帧动画

Android实现帧动画

作者头像
程序员飞飞
发布2020-02-27 16:06:40
发布2020-02-27 16:06:40
65200
代码可运行
举报
文章被收录于专栏:Android&Java技术Android&Java技术
运行总次数:0
代码可运行

Android实现帧动画

1.在res的drawable下新建一个布局animation.xml*文件

代码语言:javascript
代码运行次数:0
复制
"><animation-list xmlns:android="http://schemas.android.com/apk/res/android"
    android:oneshot="true">

    <item
        android:drawable="@drawable/image1"
        android:duration="32" />
    <item
        android:drawable="@drawable/image2"
        android:duration="32" />
    <item
        android:drawable="@drawable/image3"
        android:duration="32" />
    <item
        android:drawable="@drawable/image4"
        android:duration="32" />
    <item
        android:drawable="@drawable/image5"
        android:duration="32" />
    <item
        android:drawable="@drawable/image6"
        android:duration="32" />
    <item
        android:drawable="@drawable/image7"
        android:duration="32" />
    <item
        android:drawable="@drawable/image8"
        android:duration="32" />
    <item
        android:drawable="@drawable/image9"
        android:duration="32" />
    <item
        android:drawable="@drawable/image10"
        android:duration="32" />
    <item
        android:drawable="@drawable/image11"
        android:duration="32" />
    <item
        android:drawable="@drawable/image12"
        android:duration="32" />
    <item
        android:drawable="@drawable/image13"
        android:duration="32" />
    <item
        android:drawable="@drawable/image14"
        android:duration="32" />
    <item
        android:drawable="@drawable/image15"
        android:duration="32" />
    <item
        android:drawable="@drawable/image16"
        android:duration="32" />
    <item
        android:drawable="@drawable/image17"
        android:duration="32" />
    <item
        android:drawable="@drawable/image18"
        android:duration="32" />
    <item
        android:drawable="@drawable/image19"
        android:duration="32" />
    <item
        android:drawable="@drawable/image20"
        android:duration="32" />
    <item
        android:drawable="@drawable/image21"
        android:duration="32" />
    <item
        android:drawable="@drawable/image22"
        android:duration="32" />
    <item
        android:drawable="@drawable/image23"
        android:duration="32" />
    <item
        android:drawable="@drawable/image24"
        android:duration="32" />
    <item
        android:drawable="@drawable/image25"
        android:duration="32" />
    <item
        android:drawable="@drawable/image26"
        android:duration="32" />
    <item
        android:drawable="@drawable/image27"
        android:duration="32" />
    <item
        android:drawable="@drawable/image28"
        android:duration="32" />
    <item
        android:drawable="@drawable/image29"
        android:duration="32" />
    <item
        android:drawable="@drawable/image30"
        android:duration="32" />
    <item
        android:drawable="@drawable/image31"
        android:duration="32" />
    <item
        android:drawable="@drawable/image32"
        android:duration="32" />
    <item
        android:drawable="@drawable/image33"
        android:duration="32" />
    <item
        android:drawable="@drawable/image34"
        android:duration="32" />
    <item
        android:drawable="@drawable/image35"
        android:duration="32" />
    <item
        android:drawable="@drawable/image36"
        android:duration="32" />
    <item
        android:drawable="@drawable/image37"
        android:duration="32" />
    <item
        android:drawable="@drawable/image38"
        android:duration="32" />
    <item
        android:drawable="@drawable/image39"
        android:duration="32" />
    <item
        android:drawable="@drawable/image40"
        android:duration="32" />
    <item
        android:drawable="@drawable/image41"
        android:duration="32" />
    <item
        android:drawable="@drawable/image42"
        android:duration="32" />
    <item
        android:drawable="@drawable/image43"
        android:duration="32" />
    <item
        android:drawable="@drawable/image44"
        android:duration="32" />
    <item
        android:drawable="@drawable/image45"
        android:duration="32" />
    <item
        android:drawable="@drawable/image46"
        android:duration="32" />
    <item
        android:drawable="@drawable/image47"
        android:duration="32" />
    <item
        android:drawable="@drawable/image48"
        android:duration="32" />
    <item
        android:drawable="@drawable/image49"
        android:duration="32" />
    <item
        android:drawable="@drawable/image50"
        android:duration="32" />
    <item
        android:drawable="@drawable/image51"
        android:duration="32" />
    <item
        android:drawable="@drawable/image52"
        android:duration="32" />
    <item
        android:drawable="@drawable/image53"
        android:duration="32" />
    <item
        android:drawable="@drawable/image54"
        android:duration="32" />
    <item
        android:drawable="@drawable/image55"
        android:duration="32" />
    <item
        android:drawable="@drawable/image56"
        android:duration="32" />
    <item
        android:drawable="@drawable/image57"
        android:duration="32" />
    <item
        android:drawable="@drawable/image58"
        android:duration="32" />
    <item
        android:drawable="@drawable/image59"
        android:duration="32" />
    <item
        android:drawable="@drawable/image60"
        android:duration="32" />

</animation-list>

android:oneshot=”true”当为true时表示只播放一次,为false时表示循环播放;

2.给ImageView设置帧动画的src

代码语言:javascript
代码运行次数:0
复制
    <ImageView
        android:id="@+id/ivLoading"
        android:layout_width="300dp"
        android:layout_height="300dp"
        android:layout_centerInParent="true"
        android:src="@drawable/animation"
        android:visibility="gone" />

3.播放帧动画

代码语言:javascript
代码运行次数:0
复制
    ivLoading.setImageResource(R.drawable.animation);
    drawable = (AnimationDrawable) ivLoading.getDrawable();
    drawable.start();

4.以上播放默认是没有监听的,所以我们这里提供一种自定义View,可以监听帧动画播完的监听

代码语言:javascript
代码运行次数:0
复制
/**
 * 自定义可以播放动态图片的ImageView
 */
public class AnimationImageView extends ImageView {

    public AnimationImageView(Context context) {
        super(context);
    }

    public AnimationImageView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public AnimationImageView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }



    public interface OnFrameAnimationListener{
        /**
         * 动画开始播放后调用
         */
        void onStart();
        /**
         * 动画结束播放后调用
         */
        void onEnd();
    }

    /**
     * 不带动画监听的播放
     * @param resId
     */
    public void loadAnimation(int resId){
        setImageResource(resId);
        AnimationDrawable anim = (AnimationDrawable)getDrawable();
        anim.start();
    }

    /**
     * 带动画监听的播放
     * @param resId
     * @param listener
     */
    public void loadAnimation(int resId, final OnFrameAnimationListener listener) {
        setImageResource(resId);
        AnimationDrawable anim = (AnimationDrawable)getDrawable();
        anim.start();
        if(listener != null){
            // 调用回调函数onStart
            listener.onStart();
        }

        // 计算动态图片所花费的事件
        int durationTime = 0;
        for (int i = 0; i < anim.getNumberOfFrames(); i++) {
            durationTime += anim.getDuration(i);
        }

        // 动画结束后
        new Handler().postDelayed(new Runnable() {

            @Override
            public void run() {
                if(listener != null){
                    // 调用回调函数onEnd
                    listener.onEnd();
                }
            }
        }, durationTime);
    }
}

5.代码中加载并设置监听

代码语言:javascript
代码运行次数:0
复制
            // 加载带监听的帧动画
            anim_view.loadAnimation(R.drawable.anim_defense,
                    new OnFrameAnimationListener() {

                        @Override
                        public void onStart() {
                            // 动画刚播放时
                        }

                        @Override
                        public void onEnd() {
                            // 动画结束播放时
                        }
                    });

参考文章:

http://blog.csdn.net/zuozuoshenghen/article/details/50249569

http://blog.csdn.net/u012975705/article/details/48717391

http://www.cnblogs.com/net168/p/4204797.html

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017/09/05 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Android实现帧动画
    • 1.在res的drawable下新建一个布局animation.xml*文件
    • 2.给ImageView设置帧动画的src
    • 3.播放帧动画
    • 4.以上播放默认是没有监听的,所以我们这里提供一种自定义View,可以监听帧动画播完的监听
    • 5.代码中加载并设置监听
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档