新东西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
- 新东西018--自定义ViewGroup
- Android自定义控件之继承ViewGroup创建新容器
- Android 自定义控件之继承ViewGroup创建新容器
- 自定义ViewGroup
- 自定义ViewGroup
- 自定义ViewGroup
- 自定义ViewGroup
- 自定义viewGroup
- 自定义viewgroup
- 自定义viewgroup
- 自定义ViewGroup
- 自定义ViewGroup
- 自定义ViewGroup
- 自定义ViewGroup
- 自定义ViewGroup
- 自定义ViewGroup
- 自定义ViewGroup
- 自定义ViewGroup
- Hibernate 配置属性
- java加解密之AES使用
- Hibernate中对象的三种状态
- 全球最杰出的14位程序员
- Java Lambda表达式入门(转载)
- 新东西018--自定义ViewGroup
- ext如何格式化时间格式
- JavaScript基础之Node.js的模块
- Docker CE 镜像源站
- 不一样的C语言-变量
- Data Structure
- 面向对象和面向过程的区别_动力节点Java学院整理
- Sublime Text 3 快捷键
- mariadb安装及简单sql语法