话不都说,也不知道说啥,看代码就够:

package com.load.anim;import android.animation.Animator;import android.animation.AnimatorListenerAdapter;import android.animation.ValueAnimator;import android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.graphics.RectF;import android.util.AttributeSet;import android.util.Log;import android.view.View;import android.view.animation.LinearInterpolator;/** * Created by admin on 2016/11/1. */public class LoadingCircularRing extends View {    private ValueAnimator valueAnimator;    private Paint mPaint;    private float startAngle = 0f;    private int mWidth;    private int mPadding;    public LoadingCircularRing(Context context) {        this(context,null);    }    public LoadingCircularRing(Context context, AttributeSet attrs) {        this(context, attrs,0);    }    public LoadingCircularRing(Context context, AttributeSet attrs, int defStyleAttr) {        super(context, attrs, defStyleAttr);        initPaint();    }    private void initPaint() {        mPaint = new Paint();        mPaint.setStyle(Paint.Style.STROKE);        mPaint.setAntiAlias(true);        mPaint.setColor(Color.WHITE);        mPaint.setStrokeWidth(8);    }    @Override    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {        setMeasuredDimension(100,100);        mWidth = getMeasuredWidth();        mPadding = 5;    }    @Override    protected void onDraw(Canvas canvas) {        super.onDraw(canvas);        mPaint.setColor(Color.parseColor("#88FFFFFF"));        canvas.drawCircle(mWidth / 2, mWidth / 2, mWidth / 2 - mPadding, mPaint);        mPaint.setColor(Color.WHITE);        RectF rectF = new RectF(mPadding, mPadding, mWidth - mPadding, mWidth - mPadding);        canvas.drawArc(rectF, startAngle, 60, false, mPaint);//第四个参数是否显示半径    }    public void startAnim() {        stopAnim();        startViewAnim(0f, 1f, 800);    }    public void stopAnim() {        if (valueAnimator != null) {            clearAnimation();            valueAnimator.setRepeatCount(0);//-1表示无限循环            valueAnimator.cancel();            valueAnimator.end();        }    }    private ValueAnimator startViewAnim(float startF, final float endF, long time) {        valueAnimator = ValueAnimator.ofFloat(startF, endF);        valueAnimator.setDuration(time);        valueAnimator.setInterpolator(new LinearInterpolator());        valueAnimator.setRepeatCount(ValueAnimator.INFINITE);//无限循环        valueAnimator.setRepeatMode(ValueAnimator.RESTART);//        valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {            @Override            public void onAnimationUpdate(ValueAnimator valueAnimator) {                float value = (float) valueAnimator.getAnimatedValue();                startAngle = 360 * value;                invalidate();            }        });        valueAnimator.addListener(new AnimatorListenerAdapter() {            @Override            public void onAnimationEnd(Animator animation) {                super.onAnimationEnd(animation);            }        });        if (!valueAnimator.isRunning()) {            valueAnimator.start();        }        return valueAnimator;    }    @Override    protected void onWindowVisibilityChanged(int visibility) {        super.onWindowVisibilityChanged(visibility);        if(visibility==View.VISIBLE){            startAnim();        }else{            stopAnim();        }    }}
效果:



更多相关文章

  1. android 图片轮播(banner)无限轮播
  2. androidの高仿支付宝扫描动画效果
  3. android 线程间通信
  4. android中无限循环滑动的gallery实例
  5. Android(安卓)gallery实现图片的左右循环旋转源码分享
  6. Android(安卓)gallery实现图片的左右循环旋转源码分享
  7. Android(安卓)初步学习BroadCast与Service实现简单的音乐播放器
  8. android shape使用总结
  9. android中如何利用线程循环打印

随机推荐

  1. Android中的dp
  2. java后台程序员转android 《二》之 集成
  3. Android(安卓)Monkey工具
  4. AndroidStudio快捷键和使用相关
  5. Android(安卓)判断是否有刘海屏
  6. Android百度地图点聚合聚合点的样式修改-
  7. 在Android中调用WebService .
  8. react-native-vector-icons使用
  9. Qt开发Android范例详入门详解
  10. 跟Google学习Android开发-起始篇-构建你