Android 自定义TextView

网上有很多自定义TextView,我这里只是记一下自己写这个的体会,做一个简单的TextView。

首先,我在values文件夹下新建一个attrs文件,并在里面创建要自定义TextView的属性

<resources>
    <declare-styleable name="MyTextView">
        <attr name="textColor" format="color"/>
        <attr name="textSize" format="dimension"/>
        <attr name="text" format="string"/>
        <attr name="maxLength" format="integer"/>
    </declare-styleable>
</resources>

  对上面代码这里简单说两句,name="MyTextView" ,最好TextView的类名,便于区分,里面的format的取值可以去百度一下,都很简单。

上面的代码也很简单,也有少部分注释,我提几个重点:

  1、获取资源文件后一定要回收

2、测量view大小,

测量view大小有三种模式:EXACTLY、AT_MOST、UNSPECIFIED,每个模式代表不同的意思,不明白的可以百度

这里AT_MOST是测量wrap_content,这里还有一个工具Rect,他的作用是帮我获取到文字的大小,因为测量文字的宽高与文字的长度和大小有关,当然还有padding,具体想了解Rect的可以参考:Rect

3、绘制onDraw

  首先canvas.drawText(mText,getPaddingLeft(),y,mPaint); 第一个参数是文字本身,第二个参数是绘制的起点,第三个参数是基线,第四个参数是画笔,这里比较不好搞懂的是第三个基线,下面盗了一张图

  基线就是Baseline,我们要得到他的位置(我的理解相当于坐标),这种图要注意,Height是在TOP和BOTTOM之间(个人理解),而Height一半是中线(是中间线),那么中线到基线BaseLine应该还有一段距离dy,我们能很容易得到中线,所以要求dy,

我们可以通过Paint.FontMetricsInt 来得到Bottom和Top,注意这里的Bottom是正值(假设为5),Top是负值(假设为-10),我们要求Bottom与top的宽度所以是Bottom-top,得到了他的宽度的一半再减bottom就能得到dy,然后再加上高度的一半就能得到基线的位置。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值