自定义view备忘录

适用于圆弧、圆、多边形
一、确定view的中心位置,确定半径的大小

1、画布移动到屏幕正中心,则中心位置为(0,0)

  canvas.translate(mWidth / 2, mWidth / 2);

半径的大小可以设为一下两种:

第一种情况: 

@Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        radius = getMeasuredWidth() / 4;
        canvas.save();
        //画布平移,对于计算坐标点比较方便,简单
        canvas.translate(mWidth / 2, mWidth / 2);

    }
第二种情况:

 @Override
    protected void onSizeChanged(int w, int h, int oldw, int oldh) {
        radius = Math.min(h, w) /2 * 0.5f;
        centerX = w / 2;
        centerY = h / 2;
        postInvalidate();
        super.onSizeChanged(w, h, oldw, oldh);
    }

注:如果没有设定view的大小,需要在onMeasure()中,根据三种模式设定view的大小,如果重新计算过宽高,则调用setMeasuredDimension(w, h);,不能再在onMeasure中调用 super.onMeasure(w, h); 否则会造成view不显示问题;

二、确定圆弧、多边形、圆上的坐标点、

centerX: view坐标原点X点 centerY: view坐标原点Y点 radius:半径 radian:弧度 percent:默认为1,多适用于覆盖区域计算,例如max值为160,而需要覆盖区域为80,这个时候percent的值为 0.5
x轴坐标:
x = (int) (centerX + radius * Math.sin(radian) * percent);

Y轴坐标:
y = (int) (centerY + radius * Math.cos(radian) * percent);

注:角度转弧度公式: π/180×角度 Math.toRadians(角度)
弧度转角度公式: 180/π×弧度
弧度转弧长公式: 半径 x 弧度
计算x/y坐标时,并非一成不变的,要根据坐标点的象限,来判断是坐标原点+/-计算出来的x/y

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值