Android自定义图表库(一):圆形进度图

效果预览

在这里插入图片描述

自定义View第一步:确认View的大小

无论是自定义一个View还是ViewGroup我们必须得先为其制定在不同MeasureSpecMode下的大小,我这里就不讲解什么绘制源码了什么的,我们就直接实战。
我们在onMeasure中需要调用setMeasuredDimension(width,height)来为这个View确定宽高,调用这个方法确认完,我们就可以通过getMeasuredWidth和getMeasuredHeight来获取设置的这两个值了,而我们看过相关文章或者源码的童鞋们都知道,View的onMeasure默认实现是会处理 MeasureSpec.EXACTLY这种模式的,因为这种模式下代表宽高在XML或者代码中明确设置过了,或者是父View的大小。所以我们只需处理MeasureSpec.AT_MOST这种模式时,宽高是多少,因为这个模式代表了我们在XML设置了wrap_content,而包裹内容是多大,我们不知道,必须得自己明确的设置,你设置多大就是多大。一般的话,我们会根据绘制内容会绘制多大来确认这个View的大小,但是我们这种图表类的绘制内容要绘制的时候又需要根据控制的大小去设置一些变量,所以这样就产生了矛盾,所以我们这里的这个自定义View必须得先设置一个合适的宽高,我在这里就设置它为父View的2/3。

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        int widthSize = MeasureSpec.getSize(widthMeasureSpec);
        int widthMode = MeasureSpec.getMode(widthMeasureSpec);
        int heightSize = MeasureSpec.getSize(heightMeasureSpec);
        int heightMode = MeasureSpec.getMode(heightMeasureSpec);

        int resultWidth = widthSize;
        int resultHeight = heightSize;

        if(widthMode == MeasureSpec.AT_MOST){ //wrap_content的时候取父宽度的2/3
            resultWidth &
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值