博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
自定义Viewgroup实现流式布局(1):回顾自定义view
阅读量:4057 次
发布时间:2019-05-25

本文共 1602 字,大约阅读时间需要 5 分钟。

1.常用的3个方法:onMeasure,onLayout,onDraw

onLayout:确定子控件的位置,自定义ViewGroup才会用
onDraw:绘制(ViewGroup不设置背景的话是不会触发这个方法的,因为只是个容器,容器里面的所有内容怎么出现都是子view的onDraw实现的,只有操作这个ViewGroup本身,才会走自己的onDraw)
onMeasure:计算控件的大小

三个方法的触发顺序

onMeasure> onLayout> onDraw
2.onMeasure的三种计算模式
EXACTLY对应match或者指定大小
AT_MOST对应wrap
UNSPECIFIED对应未知
3.当继承view,实现onDraw方法绘制几个文字并设置view大小会wrap时,为什么view的实际区域却是match的样子?
这跟view自带的onMeasure方法有关系,点到view源码可以看到在这个方法中返回的计算宽高,在当warp时返回的是macth。

源码如下:

public static int getDefaultSize(int size, int measureSpec) {        int result = size;        int specMode = MeasureSpec.getMode(measureSpec);        int specSize = MeasureSpec.getSize(measureSpec);        switch (specMode) {        case MeasureSpec.UNSPECIFIED:            result = size;            break;        case MeasureSpec.AT_MOST:        case MeasureSpec.EXACTLY:            result = specSize;            break;        }        return result;    }

4.自定义view时如何设置他的宽高?
调用setMeasuredDimension(width, height);方法来设置宽高
5.如何得到默认设置的宽高?
int widthMode = MeasureSpec.getMode(widthMeasureSpec);   //获取宽的模式
int heightMode = MeasureSpec.getMode(heightMeasureSpec); //获取高的模式
int widthSize = MeasureSpec.getSize(widthMeasureSpec);   //获取宽的尺寸
int heightSize = MeasureSpec.getSize(heightMeasureSpec); //获取高的尺寸
如3所述当view写的wrap时,这个计算值就是当前可用的剩余区域。
6.如何正确的设置宽高?
比如:实现一个如果内容小于一行则全部显示如果内容大于一行则每行只能显示7个字符的Textview。
不换行的方法:继承view,重写ondraw()方法,canvas.drawText,给定基线的起始XY即可。
如果需要文字的纵向中心是你设定的某个Y值,则需要计算基线的位置,因为基线!=中线,可参考下:
7.view和viewgroup如何刷新

view的所有显示是在onDraw里面处理的,调用invalidate()即可;

viewgroup总子控件的显示是在onMeasure和onlayout里面,需要调用requestLayout方法,如果是更改viewgroup的背景颜色,还是需要调用invalidate。

转载地址:http://ncrci.baihongyu.com/

你可能感兴趣的文章
性能调优之iftop命令详解
查看>>
非关系型数据库(nosql)介绍
查看>>
移动端自动化测试-Windows-Android-Appium环境搭建
查看>>
Xpath使用方法
查看>>
移动端自动化测试-Mac-IOS-Appium环境搭建
查看>>
Selenium之前世今生
查看>>
Selenium-WebDriverApi接口详解
查看>>
Selenium-ActionChains Api接口详解
查看>>
Selenium-Switch与SelectApi接口详解
查看>>
Selenium-Css Selector使用方法
查看>>
Linux常用统计命令之wc
查看>>
测试必会之 Linux 三剑客之 sed
查看>>
Socket请求XML客户端程序
查看>>
Java中数字转大写货币(支持到千亿)
查看>>
Java.nio
查看>>
函数模版类模版和偏特化泛化的总结
查看>>
VMware Workstation Pro虚拟机不可用解决方法
查看>>
redis学习总结-- 内部数据 字符串 链表 字典 跳跃表
查看>>
iOS 对象序列化与反序列化
查看>>
iOS 序列化与反序列化(runtime) 01
查看>>