「这是我参与2022首次更文挑战的第4天,活动详情查看:2022首次更文挑战」。
View的基本属性
在我们开发一些辅助性的功能是,了解View的一些基本属性是很有必要的
位置参数
View的位置参数主要有 左(Left),右(right), 上(top),下(Bottom)
MotionEvent
MotionEvent 是指一些用户所触发的动作,总的而言,用户的动作可以分为这几类。
- ACTION_DOWN 一个事件序列的开始,用户按下的那一刻
- ACTION_MOVE 当用户按下后,其所有的动作都可以看做MOVE
- ACTION_UP 用户手指抬起,一个事件序列结束
TouchSlop
系统识别的可以认为滑动的最短距离
VelocityTracker
用于追踪用户手指在屏幕上滑动的速度
GeastureDetecotor
手势检测,用于检测用户产生的一些MotionEvent
测量标准(MeasureSpec)
前面提到过View的工作过程包括:测量,布局,绘制,其中测量是整个工作过程的基础。
对于一般的View来讲,MeasureSpec主要取决于父容器的MeasureSpec与自己的layoutParams,可以简单的表示为:
MeasureSpec(子view) = MeasureSpec(父容器)+layoutParams(子view)
MeasureSpec是一个32位的int型值,前2位表示SpecMode,后30位表示SpecSize,SpecSize指在某种SpecMode的规格大小
SpecMode有三种:
- unspecified:父容器不对view进行限制
- exactly:父容器计算出了view的精确大小,其大小就是SpecSize所指定的值
- at_most:父容器给定一个最大值,子view的大小不能超过这个值 对于普通View的MeasureSpec的创建规则有一个经典的表格
| exactly | at_most | unspecified | |
|---|---|---|---|
| dp/px | exactly/childSize | exactly/childSize | exactly/childSize |
| match_parent | exactly/parentSize | at_most/parentSize | unspecified/0 |
| wrap_content | at_most/parentSize | at_most/parentSize | unspecified/0 |
自定义View
在有了之前的对View的了解之后,我们可以在布局和绘制这两个工作阶段对view进行自定义。我们可以根据具体的业务需求来对view进行自定义;
比如如果要实现一些不能通过view的布局组合得到页面时,我们需要到更底层去实现需求,这样就需要重写onDraw,自己来绘制一些图形.
如果当前的layout方法不能达到需求则可以通过重写onlayout自己设计一种layout
以上两种是我们完全从零开始自己设计的view或者viewGroup,但是有时候我们不需要完全从零开始,那么就可以通过继承已有的view,比如TextView,linerLayout来对已有的功能进一步扩展