Android自定义View(二)

作者: ReturnYHH | 来源:发表于2016-12-18 14:39 被阅读30次

    上篇讲述了自定义view初步写法,回顾一下,自定义view的步骤总共5步:
    1.在res/values下创建attrs.xml文件,存放我们的属性
    2.继承view,并且实现它的构造方法
    3.获取属性值并且赋值
    4.重写onMeasure和onDraw方法
    5.在布局文件中,包名+类名引用
    其实自定义view的套路也就这么几种,多写写摸清了套路就不觉得难了,今天我们在上篇的基础上再进行些修改,先看效果图


    我们在原来的上面加入了文字,没错,今天就是来说说怎么画文字,步骤差不多,就不啰嗦了,先看看attr文件


    这里我们定义了三个属性,文字颜色,文字大小和文本内容,然后我们在构造方法中引用


    然后我们需要定义出文字的画笔,并且设置好属性,然后在onDraw里面画出来


    现在重点来了,我们该怎么画文字,文字没有像画圆那么简单,我们先来看一张图


    我们可以看到,文字是处于圆的中心位置,而文字的左边坐标当前view的一半减去文本的一半,就是我们的x轴坐标,view的一半实际就是半径,所以,我们就确定了x的坐标,那么y坐标呢?先看张文字规格图


    baseline是我们的文字基准线,就是说文字基本到达的位置,我们的E和H都一样的,J就长了点出来,那么,Descent就是基线到最低部的距离,Ascent是我们文字顶部到基准线的距离,红色的就是我们中心线,我们需要把文字放置在中心线的位置上,那么就是Ascent+Descent的距离的一半,因为Ascent是处于基准线上方,是负数,Descent是处于基准线下方,是正数,所以我们需要取相反数,然后我们就可以用view的高的一半加上我们取值,就是我们的y轴坐标,知道规格之后,那就很容易了,看看onDraw怎么写


    代码还是挺简单
    我们也可以通过绘制一个Rect去包裹文本,然后通过rect提供的获取宽和高的方法绘制出文本


    但是,由于rect的width()方法和height()方法返回的是int类型,所以会导致绘制出来的文本有所偏差,所以最好不用这种方式去绘制,好了,基本绘制文本内容就是这样了

    相关文章

      网友评论

        本文标题:Android自定义View(二)

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