▲ 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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 【真题21套】计算机二级公共基础知识选择题真题【含解析】「建议收藏」

    【真题21套】计算机二级公共基础知识选择题真题【含解析】「建议收藏」目录第1套公共基础选择题真题第2套公共基础选择题真题第3套公共基础选择题真题第4套公共基础选择题真题第5套公共基础选择题真题第6套公共基础选择题真题第7套公共基础选择题真题第8套公共基础选择题真题第9套公共基础选择题真题第10套公共基础选择题真题第11套公共基础选择题真题第12套公共基础选择题真题第13套公共基础选择题真题第14套公共基础选择题真题第15套公共基础选择题真题第16套公共基础选择题真题第17套公共基础选择题真题第18套公.

    2022年6月11日
  • pytest 执行用例_测试用例执行结果有哪些

    pytest 执行用例_测试用例执行结果有哪些前言平常我们功能测试用例非常多时,比如有1千条用例,假设每个用例执行需要1分钟,如果单个测试人员执行需要1000分钟才能跑完当项目非常紧急时,会需要协调多个测试资源来把任务分成两部分,于是执行时间

    2022年7月29日
  • Timer时间控件

    Timer时间控件第一步、创建一个Windows窗体,第二步、创建样式,在工具箱中找到TextBox和Labell、Button、timer。第三步、改变属性的Name和Text(就是改写名称)第四步、排版按钮1:使用的控制器是Label;name改为lblTime2:使用的控制器是TextBox;Name改为txtTime3:使用的控制器是Button;Name改为btnGet4…

    2022年5月23日
  • java%f什么意思_浅析Java中print、printf、println的区别「建议收藏」

    java%f什么意思_浅析Java中print、printf、println的区别「建议收藏」printf主要是继承了C语言的printf的一些特性,可以进行格式化输出print就是一般的标准输出,但是不换行println和print基本没什么差别,就是最后会换行System.out.printf(“thenumberis:d”,t);参照JAVAAPI的定义如下:’d’整数结果被格式化为十进制整数’o’整数结果被格式化为八进制整数’x’,’X’整数结果被格式化为十六…

    2022年7月8日
  • js算法初窥03(搜索及去重算法)

    前面我们了解了一些常用的排序算法,那么这篇文章我们来看看搜索算法的一些简单实现,我们先来介绍一个我们在实际工作中一定用到过的搜索算法——顺序搜索。1、顺序搜索其实顺序搜索十分简单,我们还是以第一篇

    2022年3月25日
  • python爬虫:爬取网站视频

    python爬虫:爬取网站视频

    2021年11月4日

发表回复

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

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