自定义View(一)

图片发自简书App

每次在GitHub上看到一些酷炫的控件,心中就会忍不住惊叹,也会发出呐喊,有一天我也要写出这么酷炫的控件。为了当艺术家,必然要学习自定义View。

View的绘制流程是从ViewRoot的performTraversals方法开始的,它经过measure、layout和draw三个过程才能最终将一个View绘制出来,其中measure用来测量View的宽和高,layout用来确定View在父容器中的放置位置,而draw则负责将View绘制在屏幕上。

MeasureSpec通过将SpecMode和SpecSize打包成一个int值来避免过多的对象内存分配,为了方便操作,其提供了打包和解包的方法。SpecMode有三类

  • UNSPECIFIED(不指定模式)
    值为 1073741824
    想多大多大,一般用于系统内部
  • EXACTLY(精确模式)
    父View告诉你,你应该多少大小.当XMl里的宽高属性为具体值或者为match_parent,为EXACTLY.
  • AT_MOST(至多模式)
    AT_MOST值为:-2147483648
    子控件大小最多为多少,在xml里配置的属性为wrap_content的时候.如果自定义View要支持wrap_content必须重写onMeasure,否则大小可能为0

接下去会发表自定义View的实战代码,终有一天成为艺术家写出酷炫的View.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

友情链接更多精彩内容