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


相关推荐

  • tomcat 宕机原因排查

    tomcat 宕机原因排查一、近期突然发生的现象。可能原因:被恶意攻击或利用排查方式:1、运行tomcat并查看tomcat用户是否开启了陌生进程,同时看下tomcat相关目录、系统/tmp目录有没有陌生文件2、将该tomcat的访问转向一个不匹配的tomcat,然后通过查看错误日志,看是否有频繁…

    2022年7月26日
    42
  • 内存因0xc000009c的错误_0xc0000005错误怎么解决

    内存因0xc000009c的错误_0xc0000005错误怎么解决引发0xC0000005内存违例几种可能原因分析

    2022年10月3日
    2
  • Protel99se基本教程 Protel 99SE从零开始学习教程视频教程「建议收藏」

    Protel99se基本教程 Protel 99SE从零开始学习教程视频教程「建议收藏」Protel如何从零开始学习?找个有实例的书,或有原理图,有PCB的书,把他画好,先从单面板画起,(找个简单的)自己再热转印法制作PCB,钻孔、焊接元件、调试等等,看似后面与学PROTEL无关,但这些可以让你对PCB布线有更深认识,比如、元件封装尺寸一定要精确、焊盘大小、走线粗细、元件布局放置等等,更能总结好的画图经验!更接近实际应用,这样才能掌握画图的乐趣,当我自己布的PCB的发射机,可以用收音…

    2022年5月7日
    88
  • 主机网址怎么查_主机名查询

    主机网址怎么查_主机名查询由于JEO.VEE在做国外空间主机评测服务,平时会有很多朋友询问主机方面的问题,最常见的就是“哪个国外主机商最好?”或者“justhost主机服务怎么样?”等等很多类似的问题。其实国外大部分主机都还是可以的,没有哪个主机商好,也没有哪个最差劲。只有是不适合你。到底怎么知道哪个主机商是否适合自己的站点呢?你可以与你网站规模相类似的站点做下比较。看看对方网站在那个服务器,使用的哪个空间商。比如你的

    2022年10月9日
    2
  • itoa函数,srpintf()函数 ,atoi函数

    itoa函数,srpintf()函数 ,atoi函数

    2021年9月27日
    84
  • dig(域信息搜索器)命令

    dig(域信息搜索器)命令

    2021年10月14日
    48

发表回复

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

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