当前位置:首页 > 笔记 > 正文内容

自定义View相关

jsc4年前 (2021-12-16)笔记2291

View的绘制流程:OnMeasure()——>OnLayout()——>OnDraw()


各步骤的主要工作:


OnMeasure():测量视图大小。从顶层父View到子View递归调用measure方法,measure方法又回调OnMeasure。


OnLayout():确定View位置,进行页面布局。从顶层父View向子View的递归调用view.layout方法的过程,即父View根据上一步measure子View所得到的布局大小和布局参数,将子View放在合适的位置上。


OnDraw():绘制视图。ViewRoot创建一个Canvas对象,然后调用OnDraw()。六个步骤:①、绘制视图的背景;②、保存画布的图层(Layer);③、绘制View的内容;④、绘制View子视图,如果没有就不用;⑤、还原图层(Layer);⑥、绘制滚动条。


UNSPECIFIED

父容器不对View有任何限制,要多大就给多大,这种情况一般用于系统内部,表示一种测量的状态;

EXACTLY

父容器已经检测出View所需的精确大小,这个时候View的最终打消就是SpecSize所指定的值。它对应于LayoutParams中的match_parent和具体数值这两种模式。

AT_MOST

父容器指定了一个可用大小即SpecSize,View的大小不能大于这个值,具体是什么值要看不同View的具体实现。它对应于LayoutParams中wrap_content。

未命名文件.jpg


扫描二维码推送至手机访问。

版权声明:本文由微小站发布,如需转载请注明出处。

本文链接:https://jsc0.com/post/204.html

分享给朋友:
返回列表

上一篇:Android面试题

下一篇:算法相关

“自定义View相关” 的相关文章

BufferedInputStream对象的read()怎么用?

在FileInputStream里有一个说明是说此方法将阻塞,意思就是说在你读一个文件输入流的时候,当读到某个位置的时候,如果做一些其他处理(比如说接受一部分字节做一些处理等等)这个时候输入流在什么位置就是什么位置,不会继续往下读,而BufferedInputStream虽然也有一个read方法,但...

关于初学者上传文件到github的方法

关于初学者上传文件到github的方法

【第一步】建立先仓库  第一步的话看一般的提示就知道了,在github新建一个repository(谷歌可以解决),都是可视化的界面操作,所以难度不大。或者看这里:https://help.github.com/articles/create-a-repo 这是官方help,虽然是英文的,...

Notification 8.0 关闭声音震动

NotificationChannel notificationChannel = new NotificationChannel                    (NOTIFICATION_C...

RecyclerView点击最后一个无效

RecyclerView设置的OnItemClick点击最后一个无效,在点击最后一个无效后在部分手机上点击其他item会触发最后一个view的onclick事件,有的手机始终无反应。是因为popwindow里RecyclerView宽度设置为match_parent的原因改为wrap_content...

Manifest merger failed with multiple errors, see logs

在android开发的时候,有时候会遇到这样的问题Error:Executionfailedfortask':test:processDebugManifest'.>Manifestmergerfailedwithmultipleerrors,seelogs但是要命的是,除了这...

ERROR: Failed to create toolchain.

哔哩哔哩视频编译报错build on Darwin x86_64ANDROID_NDK=/Users/sampeng/export/android-sdk-macosx/ndk-bundleIJK_NDK_REL=15.0.4075724NDKr15.0.4075724 detectedHOST_O...