自定义绘制一个扇形表

 效果图

/**
 * Created by lz on 2018/10/24.
 * 功能描述:扇形
 */

public class PieChat extends View {
    //Utils.dp2px   dp转px
    private static final int RADIUS = (int) Utils.dp2px(150);
    private static final int LENGTH = (int) Utils.dp2px(20);
    private static final int PULLED_OUT_INDEX = 2;
    Paint mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);

    //Rect的参数是  int型   ,  RectF的参数是float型,由此可以看出RectF比Rect的精确度更高。,他们都是通过四个坐标参数来确定矩形的区域。
    RectF bounds = new RectF();
    int[] angles = {60, 100, 120, 80};
    int[] colors = {Color.parseColor("#2979FF"), Color.parseColor("#C2185B"),
        Color.parseColor("#009688"), Color.parseColor("#FF8F00")};
    public PieChat(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
    }

    @Override
    protected void onSizeChanged(int w, int h, int oldw, int oldh) {
        super.onSizeChanged(w, h, oldw, oldh);
        bounds.set(getWidth()/2 - RADIUS,getHeight()/2-RADIUS,getWidth()/2+RADIUS,getHeight()/2+RADIUS);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        int currentAngle = 0;
        for (int i=0;i<angles.length;i++){
            mPaint.setColor(colors[i]);
            canvas.save();
            if (i==PULLED_OUT_INDEX){
                canvas.translate((float) Math.cos(Math.toRadians(currentAngle + angles[i] / 2)) * LENGTH,
                    (float) Math.sin(Math.toRadians(currentAngle + angles[i] / 2)) * LENGTH);
            }
            canvas.drawArc(bounds,currentAngle,angles[i],true,mPaint);
            canvas.restore();
            currentAngle += angles[i];
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值