专栏名称: 王者之影
目录
相关文章推荐
稀土掘金技术社区  ·  前端如何实现图片伪防盗链,保护页面图片 ·  10 小时前  
字体设计  ·  昭和时代东京的商店及文字招牌 ·  昨天  
伯乐在线  ·  周鸿祎:准备干掉 360 整个市场部! ·  昨天  
伯乐在线  ·  周鸿祎:准备干掉 360 整个市场部! ·  昨天  
OSC开源社区  ·  苹果用Swift重写每天数十亿次请求的Jav ... ·  3 天前  
程序员的那些事  ·  AI 编程工具 Windsurf 突遭 ... ·  4 天前  
51好读  ›  专栏  ›  王者之影

Android 实现自定义圆环

王者之影  · 掘金  ·  · 2017-12-14 02:54

正文

请到「今天看啥」查看全文


);//内圆的画笔颜色,默认 #ffffff mRvRingView.setRingStrokeWidth(40);//圆环的环宽,默认20 // mRvRingView.showViewWithAnimation(1000);//自定义动画时长展示圆环 // mRvRingView.showViewWithoutAnimation();//展示圆环不带动画 mRvRingView.showViewWithAnimation();//动画展示圆环,默认2s } }

3.自定义view的源码

public class RingView extends View {    
    private static final int CIRCLE_ANGLE = 360;//圆环的角度    
    private static final int RING_STROKE_WIDTH = 20;//默认圆环的宽度为20dp    
    private Paint mNoAssetsPaint, mInnerCirclePaint;    
    private ArrayList<Paint> mPaints;    
    private int mRingStrokeWidth;//圆环的宽度    
    private int mCanvasWidth, mCanvasHeight;    
    private RectF mRingRect, mInnerRect;    
    private int mDensity;//手机屏幕密度    
    private int mNoDataPaintColor = Color.parseColor("#cccccc");//没有数据的paint的颜色    
    private int mInnerCirclePaintColor = Color.parseColor("#ffffff");//内圆的paint的颜色    
    private ArrayList<Integer> mAngles;//传入的数据    
    private boolean mHasData = false;    
    private ArrayList<Integer> mLevelStartAngles;//每段圆弧的起始角度值    
    private int mMoveAngle;//圆弧移动的角度    
    private int mRingStartAngle = -90;//圆环的起始角度    
    private RingAnimation mRingAnim;    

    public RingView(Context context) {
        super(context);
        init(context);
    }

    public RingView(Context context, AttributeSet attrs) {
        super(context, attrs);
        init(context);
    }

    public RingView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        init(context);
    }

    private void init(Context ctx) {
        mDensity = (int) ctx.getResources().getDisplayMetrics().density;
        mRingStrokeWidth = RING_STROKE_WIDTH * mDensity;
        mPaints = new ArrayList<Paint>();
        mAngles = new ArrayList<Integer>();
        mLevelStartAngles = new ArrayList<Integer>();
        mNoAssetsPaint = new Paint();
        mNoAssetsPaint.setAntiAlias(true);
        mNoAssetsPaint.setStyle(Paint.Style.FILL);
        mNoAssetsPaint.setColor(mNoDataPaintColor);
        mInnerCirclePaint = new Paint();
        mInnerCirclePaint.setAntiAlias(true);
        mInnerCirclePaint.setStyle(Paint.Style.FILL);
        mInnerCirclePaint.setColor(mInnerCirclePaintColor);
        mRingAnim = new RingAnimation();
    }

    @Override
    protected void onDraw(Canvas canvas) {
        if (mCanvasWidth == 0) {
            initRect(); 
       } 
       if (!mHasData) {//没有数据
            mMoveAngle = CIRCLE_ANGLE; 
           drawRingView(canvas, mRingStartAngle, mMoveAngle, mNoAssetsPaint); 
       } else {
            int _level = 0;//圆弧的段数
            for






请到「今天看啥」查看全文