前言:自定义控件,是Android攻城狮进阶的必备技能,是Android应用研发的一门高级艺术,所以接下来的文章主要是学习和探索自定义控件,方便开发使用以及日后查阅。关于什么是自定义控件和为什么要使用自定义控件的这一些就不多说了,因为自定义控件设计的内容非常多,所以分几个系列去写,下面我们直接开始自定义控件探索之旅的第一篇。
安卓自定义View基础 : 坐标系
我们先来复习下坐标系,坐标系是我们初中代数里面学到的东西(美帝高中僧才开始接触,所以天朝的教育一向都是策马奔腾呐)
![img_c8eab5603dea8fe2a9d791cb8d0765c2.png](https://i-blog.csdnimg.cn/blog_migrate/801bee9ee09ce1abccabbe591fba1eb3.png)
笛卡尔坐标系告诉我们,事物的一切抽象概念都是参照于其所属的坐标系存在的,同一个事物在不同的作标系中就会有不同抽象概念来表示,坐标系表达的事物有联系的抽象概念的数量(既坐标轴的数量)就是该事物所处空间的维度。图中蓝色线和角度a 是在第一象限内,第一象限的两个坐标(x 和 y)都是正值......回忆了这么多我们就打住吧否则越扯越远,说完了笛卡尔我们在说Android的屏幕坐标系,先上图
![img_05b84fa46d8191476a9b0237d6e2d7a2.png](https://i-blog.csdnimg.cn/blog_migrate/d71e44683d0c31a50076ffb4bf19cf13.png)
按照笛卡尔的说法,事物的一切抽象概念都是参照于其所属的坐标系存在的。所以Android的屏幕也有参照物,(参照物数值化的具象化也就是 x y轴上的值 ,通过实际数值即可测量位置),但是Android的屏幕系的坐标是反的(主要指的是Y轴),其Y轴是向下的,屏幕的左上角为原点(x = 0,y = 0),从屏幕原点向左,x 轴数值会增大;从屏幕原点向下,y 轴数值会增大,反之。
所以:在常见的笛卡尔数学坐标系中角度增大方向为逆时针(0度到90度为逆时针);在默认的屏幕坐标系中角度增大方向为顺时针(因为 y轴的反的,所以角度增大方向为顺时针)。
B:View的坐标系
我们知道,Android屏幕上面会有很多的button imageView textView 这些View控件,每一个控件设置宽高,设置间距开发者都可以通过 xml 布局或者代码布局去实现。
首先:View的坐标系统是相对于父控件而言的
getTop(); //获取子View左上角距父View顶部的距离
getLeft(); //获取子View左上角距父View左侧的距离
getBottom(); //获取子View右下角距父View顶部的距离
getRight(); //获取子View右下角距父View左侧的距离
给大家上一幅图更有助于理解:
![img_0444de79be2030c17715d8b8ea6ed544.png](https://i-blog.csdnimg.cn/blog_migrate/26b1ec9b02d824139cfa01b00052d7d8.png)
我们知道,在MotionEvent中 可以通过,event.getX() , event.getY() 去获取触摸点相对于其所在组件坐标系的坐标,但是它还有个很类似的API ,event.getRawX() , event.getRawY() ,这个API其实是获取触摸点相对于屏幕默认坐标系的坐标,上一幅图更有助于我们理解:
![img_e4ea72fd4b717e105ac402a5de1b4f10.png](https://i-blog.csdnimg.cn/blog_migrate/2ea81533d2c25751fdf0f1f66baa746a.png)
其中, e 是我们触摸的点;银灰色区域是我们的组件;黄色区域部分是屏幕的默认坐标系(也就是最外层)蓝色线调用的是 e.getY()获取的是触摸点到组件的距离;e.getRawY()获取的是触摸点到屏幕的距离。
安卓自定义View基础 : 角度与弧度
为什么自定义控件会涉及到角度(angle)与弧度(radian),这个是我们可以理解的,比如说我们自定义这样一个圆弧,你必须要计算它的弧度,所以又涉及到了数学的一些计算公式(千万别被数学公式吓到了,其实就是一些很基本的运算)
![img_1d8e897b63000057ad801df3e8f739fa.png](https://i-blog.csdnimg.cn/blog_migrate/5165d3576525902b563116cfc6ffbca8.png)
角度与弧度的定义?
首先,角度和弧度一样都是描述角的一种度量单位。
角度:两条射线从圆心向圆周射出,形成一个夹角和夹角正对的一段弧。当这段弧长正好等于圆周长的360分之一时,两条射线的夹角的大小为1度。(简单理解就是 我们口中最经常提及的角度,比如下面的一幅图,< AOB ,这就是角度)
![img_3a312a10faf8d78a078fd61e3181f11e.png](https://i-blog.csdnimg.cn/blog_migrate/190e103f300389ae0c9f3268ce070186.png)
弧度:两条射线从圆心向圆周射出,形成一个夹角和夹角正对的一段弧。当且仅当这段弧长正好等于圆的半径时,两条射线的夹角大小为1弧度。(既然是 弧 ,那么简单理解它对应的是一条曲线,度,是测量单位)。角度可能比较好理解,弧度可能有点晕,继续看图加深理解
![img_295ad963022b36c360fd4e86c3efbe95.png](https://i-blog.csdnimg.cn/blog_migrate/c346981c0236b5c634d805df6e77217b.png)
当且仅当 AB的距离(注意,这里是弧长)等于 AO 或者 BO(半径)的时候,我们就称这是 1 弧度。所以,我们得知角度与弧度的换算公式:一个圆 对应的角度为360度(角度),对应的弧度为2π(弧度)
等价公式 : 360(角度) = 2π(弧度) == > 180(角度) = π(弧度)
进一步换算我们可以得知下面两个公式:
公式一:角度 = 180 / π * 弧度
公式二:弧度 = π / 180 * 角度
论证:
公式一,当弧度为 2 弧度的时候,角度 = 180 / π * 2 π = 360度
公式二,当角度为360度的是吧,弧度 = π / 180 * 360 = 2 π
![img_2171c8b80a36b88419d800f02c7ec6e5.png](https://i-blog.csdnimg.cn/blog_migrate/f3509f451073f8d091a8d0c37cc8e616.png)
安卓自定义View基础 : 颜色
原来我对颜色的理解就是简单的RGB值,查阅了资料才发现颜色居然这么讲究,首先,安卓支持的颜色模式有以下四种:
![img_49e28307c216fbfb663f48c30606a7af.png](https://i-blog.csdnimg.cn/blog_migrate/2e675eeb8534002ad62057d48d2456b2.png)
其中ARG、ARGB这些字母,它表示通道类型,数值表示该类型用多少位二进制来描述。如ARGB8888则表示有四个通道(ARGB),每个对应的通道均用8位来描述。
注意:我们常用的是ARGB8888和ARGB4444,而在所有的安卓设备屏幕上默认的模式都是RGB565,请留意这一点。
其中 A R G B 代表的意思分别是:A(Alpha)表示的是透明度,R(Red)表示红色,G(Green)代表的是绿色,B(Blue)代表的是蓝色。定义颜色的基本方式有两种,第一种是在代码中设置,通过Color这个类,就可以设置颜色值;第二种是在XML中设置,通过 # 符号开头,后面跟十六进制的值。
自定义控件探索之旅的第一篇主要就介绍到这里,第一篇主要介绍了安卓自定义控件的基础,主要内容有Android的坐标系、角度与弧度的换算、安卓的颜色介绍,第一篇的内容就是这样。
未完待续。。。
如果这篇文章对你有帮助,希望各位看官留下宝贵的star,谢谢。
Ps:著作权归作者所有,转载请注明作者, 商业转载请联系作者获得授权,非商业转载请注明出处(开头或结尾请添加转载出处,添加原文url地址),文章请勿滥用,也希望大家尊重笔者的劳动成果,谢谢。