▲ Android 自定义 Loading加载动画

▲ Android 自定义 Loading加载动画

最近在家休息,闲暇时间把自定义的东西翻出来好好研究一下,老规矩先看一下效果。

效果图
这里写图片描述

怎么样很萌吧?

实现思路
这个我采用的是用属性动画来实现的,主要是利用AnimatorUpdateListener得到动画执行每一帧所返回的值,重新设置高度。 在通过 addListener,监听每次动画执行的过程,从而赋予新的图片。

实现过程

(1) 先自定义一个ImageView

public class LoadingImageView extends android.support.v7.widget.AppCompatImageView {
  private int mTop; 
    public LoadingImageView(Context context) {
        super(context);
        Init();
    }


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

    public LoadingImageView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        Init();
    }

}

(2) 确定控件的位置

    @Override
    protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
        super.onLayout(changed, left, top, right, bottom);
        mTop = top;
    }

(3) Init() 中的方法 有注释呦

  private void Init() {
        ValueAnimator valueAnimator = ValueAnimator.ofInt(0, 100, 0);
        valueAnimator.setRepeatMode(ValueAnimator.RESTART); //倒序执行
        valueAnimator.setRepeatCount(ValueAnimator.INFINITE); //无限循环
        valueAnimator.setDuration(1300); //时长
        valueAnimator.setInterpolator(new AccelerateDecelerateInterpolator()); //插值器
        valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
            @Override
            public void onAnimationUpdate(ValueAnimator animation) {
                int dx = (Integer) animation.getAnimatedValue(); //获取动画执行每一帧所返回的值
                setTop(mTop - dx); //设置高度
            }
        });
        
        
        valueAnimator.addListener(new Animator.AnimatorListener() {
            @Override
            public void onAnimationStart(Animator animation) {
                setImageDrawable(getResources().getDrawable(R.mipmap.a));
            }

            @Override
            public void onAnimationEnd(Animator animation) {

            }

            @Override
            public void onAnimationCancel(Animator animation) {

            }

            @Override
            public void onAnimationRepeat(Animator animation) {
                mCurImageIndex++;
                switch (mCurImageIndex%ImageCount){
                    case 0:
                        setImageDrawable(getResources().getDrawable(R.mipmap.a));
                        break;
                    case 1:
                        setImageDrawable(getResources().getDrawable(R.mipmap.b));
                        break;
                    case 2:
                        setImageDrawable(getResources().getDrawable(R.mipmap.c));
                        break;
                }
            }
        });
        valueAnimator.start();
    }

被遗忘的常量

private int mCurImageIndex = 0;  //图片递增索引
private static int ImageCount = 3;// 图片的个数

应用 怎么使用这个自定义的View 从而实现这个效果

这里写图片描述

怎么样 是不是很简单呢

源码地址: https://download.csdn.net/download/macaopark/10644446

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/2845.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 异步和同步的区别_同步和异步请求的区别

    异步和同步的区别_同步和异步请求的区别”同步“就好比:你去外地上学(人生地不熟),突然生活费不够了;此时你决定打电话回家,通知家里转生活费过来,可是当你拨出电话时,对方一直处于待接听状态(即:打不通,联系不上),为了拿到生活费,你就不停的oncall、等待,最终可能不能及时要到生活费,导致你今天要做的事都没有完成,而白白花掉了时间。“异步”就是:在你打完电话发现没人接听时,猜想:对方可能在忙,暂时无法接听电话,所以你发了一条短信(或…

    2025年8月1日
    3
  • java uuid 随机数_Java随机数和UUID[通俗易懂]

    java uuid 随机数_Java随机数和UUID[通俗易懂]Java随机数和UUID#Java随机数在Java项目中通常是通过Math.random方法和Random类来获得随机数,前者通过生成一个Random类的实例来实现。此类产生的是一组伪随机数流,通过使用48位的种子,利用线性同余公式产生。在Java中,随机数的产生取决于种子,随机数和种子之间的关系遵从以下两个规则:种子不同,产生不同的随机数。种子相同,即使实例不同也产生相同的随机数。两种方式设…

    2022年7月14日
    17
  • 国外迅雷下载太慢怎么办_迅雷下载宝还能用吗

    国外迅雷下载太慢怎么办_迅雷下载宝还能用吗复制下载链接,用百度网盘离线下载到网盘内,然后从网盘直接下载,速度相当给力

    2022年9月7日
    3
  • 计算机设备问题代码43,双击unknown device由于该设备有问题Windows已将其停止(代码 43)怎么办解决教程…「建议收藏」

    计算机设备问题代码43,双击unknown device由于该设备有问题Windows已将其停止(代码 43)怎么办解决教程…「建议收藏」金士顿U盘做的启动盘(8G),在别人的电脑上储存文件正常,但在自己的电脑上无法识别,在设备管理器中显示黄色叹号,属性显示“该设备存在问题,windows已将其停止,代码43”本机win7系统,别人电脑为XP系统。已将:禁用注册表dos设置节电卸载等办法都试过了,毫无头绪!怎么办呢?Windows已将其停止。(代码43)而苦恼。那小编今天就教你处理双击unknowndevice由于…

    2022年6月28日
    53
  • NOIP 2012 年普及组初赛试题整理「建议收藏」

    NOIP 2012 年普及组初赛试题整理「建议收藏」问题求解题目答案:5题目解析:贪心法。构造出最坏情况下至多选4点、不在同一条直线上,此时再添加任意一个点,则一定出现3点一线。题目答案:2880题目解析:圆排列问题。5名大陆选手的排列方案数为:5!5名港澳选手安排在大陆选手之间的5个空位的排列方案数为:5!总的排列方案数为:5!×5!。但每位选手左边相邻的选手均相同,为重复方案。最终结果为:阅读程序#include<iostream>usingnamespace..

    2022年8月22日
    7
  • android 4怎么打开usb调试?「建议收藏」

    android 4怎么打开usb调试?「建议收藏」手机连接电脑,刷机,等都需要打开手机USB调试模式,你才能进行操作的。所以买了手机建议都要打开这个USB调试,手机锁屏密码忘记也需要打开这个。这个比较重要。工具/原料手机安卓android系统方法/步骤打开自己的手机找到《设置》点击,进入以下图例。在点击《关于手机》

    2022年9月12日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号