新东西018--自定义ViewGroup

来源:互联网 发布:阿姆斯特朗兴奋剂 知乎 编辑:程序博客网 时间:2024/06/16 01:11

这里写图片描述

要实现一个效果,一个TextView后面要跟一个动态活动标签(可以理解为不同样式的Textview),那么通过TextView.setDrawable的方式就不合适了。于是想到重写ViewGroup,在ViewGroup下塞两个TextView,通过重写onlayout重新定位获得想要效果。

具体实现分为两步
第一步:重写onMeasure方法,这很常见,继承ViewGroup的必须重写这个方法。在这个方法里,通过getChildAt获取它的子View。然后通过getMeasured…()方法获取它的测量宽高。首先,我这默认了第一个View是TextView。因为这样我就可以通过StaticLayout来计算它所展示的文本该占几行,否则不通过StaticLayou转换的话,它就只会把textview的内容计算成为一行,那么通过onMeasure得到的推荐宽高就是不科学的。而且通过StaticLayout我还能得到最后一行的文本离右边的距离。这很重要。然后我们再测量下第二个View的宽高了。然后设置两个参数用来记录第二个view开始的位置,一个是离右边的距离,一个是离上边的距离,然后比对,要是第二个View的宽度比文本最后一行文本剩余宽度要大,那说明放的下,那么我们就把第二个View离右边的距离保存起来,不然就表示要换行显示,那么我们计算整行宽度就好。高度自然要加一行的距离。

第二步:重写onlayou。同样的通过getChildAt获取View,然后直接通过View的layout重写定位绘制点即可。

开源库地址:进入app选择TextView跟随标签
https://github.com/liuweiDB/GXEffect

原创粉丝点击