- 自绘控件:这个View上所展示的内容全部是我们自己绘制出来的。绘制的代码是写在onDraw()方法中的,通常自绘控件直接继承至View(实现例子:卡片,动画展示)
- 组合控件:我们并不需要自己去绘制视图上显示的内容,而只是用系统原生的控件就好了,但我们可以将几个系统原生的控件组合到一起,这样创建出的控件就被称为组合控件。
- 继承控件:我们不需要自己重头去实现一个控件,只要去继承一个现有的控件,然后在这个控件上增加一些新功能,就可以形成一个自定义控件了。这种自定义控件的特点就是不仅能够按照我们的需求加入相应的功能,还可以保留原生控件的所有功能
- 事件类控件:通常需要处理触摸事件,并且会有消费事件。大多数事件类控件需要结合重绘方法来进行,可以给用户的手指有一个良好的反馈。如:刮刮乐
- 容器类控件:容器类控件一般指 为实现具体的需求而开发的自定义容器。如百分比布局,流式布局都是为实现具体摆放的容器类控件,一般容器类控件,只需要继承五大布局即可。如果满足不了,可以自定义实现。
心里分析:某一时间的小车位置不知道,小车角度不好调整。gif吧
需求分析:这个自定义控件没有外部事件干扰,不需要对用户进行触摸反馈,只需要重写onDraw方法就可以了。小车平行于路面,需计算角度。行驶位置需要动态计算
定义 :用来测量Path的类,可以理解成专门针对Path但每一个点获取信息的类
优势 :计算某一点的正切,余切,采取一小段Path单独拿出来进行绘制
| 参数 | 作用 |
|---|---|
| startD | 开始截取位置距离Path起点的长度(非负) |
| stopD | 结束截取位置距离Path起点的长度 |
| dst | 截取的Path将会添加到dst中 |
| startWithMoveTo | 保证截取的到Path片段不会发生形变 |
用于获取某个点的角度
| 参数 | 作用 |
|---|---|
| distance | 距离Path起点的长度 取值范围:0<=distance<=length |
| pos[] | 该点的坐标pos[0]为x的坐标,pos[1]为y的坐标 |
| tan[] | 该点的正切值,tan[0]对应角度的cos值,对应x坐标。tan[1]对应角度的sin值,对应y坐标 |
角A的正切值tanA = P.x/P.y
P点的坐标为(P.x,P.y)
P点的横坐标为P.x=cosA*斜边
P点的纵坐标为P.y=sinA*斜边
所以我们的tanA的值为tanA=cosA/sinA
所以我们的tan[]数组中存放的分别是tan[0]=cosA和tan[1]=sinA的值