美文网首页
仿 IOS 加载 loading 菊花式 哈哈哈哈

仿 IOS 加载 loading 菊花式 哈哈哈哈

作者: cao苗子 | 来源:发表于2020-03-03 16:11 被阅读0次

1.直接上代码吧

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.RectF;
import android.os.Build;
import android.support.annotation.RequiresApi;
import android.util.AttributeSet;
import android.view.View;
import android.util.TypedValue;
/**
 * created by miaozi
 * on 2020/3/3
 **/
public class CircleLoadView extends View {
    private Paint mPaint;
    private int mLineWidth;
    private boolean isRunAnimation;
    private int mCount = 0;
    private int[] mColors = new int[]{
            Color.parseColor("#FCFCFC"),
            Color.parseColor("#F0F0F0"),
            Color.parseColor("#E0E0E0"),
            Color.parseColor("#d0d0d0"),
            Color.parseColor("#BEBEBE"),
            Color.parseColor("#ADADAD"),
            Color.parseColor("#9D9D9D"),
            Color.parseColor("#8E8E8E"),
            Color.parseColor("#7B7B7B"),
            Color.parseColor("#6C6C6C"),
            Color.parseColor("#5B5B5B"),
            Color.parseColor("#4F4F4F"),
            Color.parseColor("#3C3C3C"),
            Color.parseColor("#272727"),
    };
    private RectF mRectF;

    public CircleLoadView(Context context) {
        this(context,null);
    }

    public CircleLoadView(Context context, AttributeSet attrs) {
        this(context, attrs,0);
    }

    public CircleLoadView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        mPaint = new Paint();
        mPaint.setStyle(Paint.Style.FILL);
        mPaint.setAntiAlias(true);
        mPaint.setColor(Color.BLACK);
        mLineWidth = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,20,getResources().getDisplayMetrics());
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        int width = MeasureSpec.getSize(widthMeasureSpec);
        int height = MeasureSpec.getSize(heightMeasureSpec);
        if (width > height) {
            width = height;
        } else if (height > width) {
            height = width;
        }
        if (mRectF == null){
            int radius = width / 3;
            int circleRadius = width / 20;
            mRectF = new RectF(width/2 - circleRadius - radius,height/2-mLineWidth,radius,height/2+mLineWidth);
        }
        setMeasuredDimension(width,height);
    }

    @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
    @Override
    protected void onDraw(Canvas canvas) {
        canvas.rotate(mCount * 36 ,getWidth()/2,getWidth()/2);
        for(int i = 0 ; i < 10 ; i ++ ){
            canvas.drawRect(mRectF,mPaint);
            mPaint.setColor(mColors[i]);
            //旋转36度
            canvas.rotate(36,getWidth()/2,getWidth()/2);
        }
        if(mCount == 9){
            mCount = 0;
        }else {
            mCount ++;
        }
        if(isRunAnimation) {
            postInvalidateDelayed(100);
        }
    }

    /**
     * 显示 自动启动轮循
     */
    @Override
    protected void onAttachedToWindow() {
        super.onAttachedToWindow();
        isRunAnimation = true;
        postInvalidate();
    }
    /**
     * 关闭就停止
     */
    @Override
    protected void onDetachedFromWindow() {
        super.onDetachedFromWindow();
        isRunAnimation = false;
    }
}

相关文章

网友评论

      本文标题:仿 IOS 加载 loading 菊花式 哈哈哈哈

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