美文网首页
Android属性动画自定义弹跳加载效果

Android属性动画自定义弹跳加载效果

作者: dlihasa | 来源:发表于2018-11-28 01:28 被阅读81次
    效果(忽略具体用图)
    弹跳加载.gif
    自定义view代码
    import android.animation.Animator;
    import android.animation.ValueAnimator;
    import android.content.Context;
    import android.support.annotation.Nullable;
    import android.util.AttributeSet;
    import android.view.animation.AccelerateDecelerateInterpolator;
    
    import com.dhasa.selfview.R;
    
    public class LoadingImageView extends android.support.v7.widget.AppCompatImageView{
    
        private int mTop;
    
        public LoadingImageView(Context context) {
            super(context);
            init();
        }
    
        public LoadingImageView(Context context, @Nullable AttributeSet attrs) {
            super(context, attrs);
            init();
        }
    
        public LoadingImageView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
            super(context, attrs, defStyleAttr);
            init();
        }
    
        private void init() {
            ValueAnimator animator = ValueAnimator.ofInt(0,100,0);
            animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
                @Override
                public void onAnimationUpdate(ValueAnimator animation) {
                    int dx = (int) animation.getAnimatedValue();
                    setTop(mTop-dx);
                }
            });
            animator.addListener(new Animator.AnimatorListener() {
    
                private int curImgIndex = 0;
                private int imgCount = 3;
    
                @Override
                public void onAnimationStart(Animator animation) {
                    setImageResource(R.drawable.icon_mobile);
                }
    
                @Override
                public void onAnimationEnd(Animator animation) {
    
                }
    
                @Override
                public void onAnimationCancel(Animator animation) {
    
                }
    
                @Override
                public void onAnimationRepeat(Animator animation) {
                    curImgIndex++;
                    switch (curImgIndex%imgCount){
                        case 0:
                            setImageResource(R.drawable.icon_mobile);
                            break;
                        case 1:
                            setImageResource(R.drawable.loading);
                            break;
                        case 2:
                            setImageResource(R.drawable.scan_circle);
                            break;
                    }
                }
            });
            animator.setRepeatMode(ValueAnimator.RESTART);
            animator.setRepeatCount(ValueAnimator.INFINITE);
            animator.setInterpolator(new AccelerateDecelerateInterpolator());
            animator.setDuration(2000);
            animator.start();
    
        }
    
        @Override
        protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
            super.onLayout(changed, left, top, right, bottom);
            mTop = top;
        }
    }
    
    代码思路:
    • 为了容易更换图片,直接继承自ImageView
    • 属性动画可以添加两种监听事件,ValueAnimator.AnimatorUpdateListener用来监听移动距离变化来改变控件位置,Animator.AnimatorListener用来修改图片显示。

    相关文章

      网友评论

          本文标题:Android属性动画自定义弹跳加载效果

          本文链接:https://www.haomeiwen.com/subject/djuoqqtx.html