自定义控件探索之旅一1(笔记)

简介: 前言:自定义控件,是Android攻城狮进阶的必备技能,是Android应用研发的一门高级艺术,所以接下来的文章主要是学习和探索自定义控件,方便开发使用以及日后查阅。

前言:自定义控件,是Android攻城狮进阶的必备技能,是Android应用研发的一门高级艺术,所以接下来的文章主要是学习和探索自定义控件,方便开发使用以及日后查阅。关于什么是自定义控件和为什么要使用自定义控件的这一些就不多说了,因为自定义控件设计的内容非常多,所以分几个系列去写,下面我们直接开始自定义控件探索之旅的第一篇。

安卓自定义View基础 : 坐标系

我们先来复习下坐标系,坐标系是我们初中代数里面学到的东西(美帝高中僧才开始接触,所以天朝的教育一向都是策马奔腾呐)


img_c8eab5603dea8fe2a9d791cb8d0765c2.png
熟悉的坐标系

笛卡尔坐标系告诉我们,事物的一切抽象概念都是参照于其所属的坐标系存在的,同一个事物在不同的作标系中就会有不同抽象概念来表示,坐标系表达的事物有联系的抽象概念的数量(既坐标轴的数量)就是该事物所处空间的维度。图中蓝色线和角度a 是在第一象限内,第一象限的两个坐标(x 和 y)都是正值......回忆了这么多我们就打住吧否则越扯越远,说完了笛卡尔我们在说Android的屏幕坐标系,先上图


img_05b84fa46d8191476a9b0237d6e2d7a2.png
Android屏幕坐标系

按照笛卡尔的说法,事物的一切抽象概念都是参照于其所属的坐标系存在的。所以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
View的坐标系

我们知道,在MotionEvent中   可以通过,event.getX() , event.getY() 去获取触摸点相对于其所在组件坐标系的坐标,但是它还有个很类似的API ,event.getRawX() , event.getRawY() ,这个API其实是获取触摸点相对于屏幕默认坐标系的坐标,上一幅图更有助于我们理解:


img_e4ea72fd4b717e105ac402a5de1b4f10.png
MotionEvent

其中, e 是我们触摸的点;银灰色区域是我们的组件;黄色区域部分是屏幕的默认坐标系(也就是最外层)蓝色线调用的是 e.getY()获取的是触摸点到组件的距离;e.getRawY()获取的是触摸点到屏幕的距离。


安卓自定义View基础 : 角度与弧度

为什么自定义控件会涉及到角度(angle)与弧度(radian),这个是我们可以理解的,比如说我们自定义这样一个圆弧,你必须要计算它的弧度,所以又涉及到了数学的一些计算公式(千万别被数学公式吓到了,其实就是一些很基本的运算)


img_1d8e897b63000057ad801df3e8f739fa.png


角度与弧度的定义?

首先,角度和弧度一样都是描述角的一种度量单位。

角度:两条射线从圆心向圆周射出,形成一个夹角和夹角正对的一段弧。当这段弧长正好等于圆周长的360分之一时,两条射线的夹角的大小为1度。(简单理解就是 我们口中最经常提及的角度,比如下面的一幅图,< AOB ,这就是角度)


img_3a312a10faf8d78a078fd61e3181f11e.png

弧度:两条射线从圆心向圆周射出,形成一个夹角和夹角正对的一段弧。当且仅当这段弧长正好等于圆的半径时,两条射线的夹角大小为1弧度。(既然是 弧 ,那么简单理解它对应的是一条曲线,度,是测量单位)。角度可能比较好理解,弧度可能有点晕,继续看图加深理解


img_295ad963022b36c360fd4e86c3efbe95.png
弧度

当且仅当 AB的距离(注意,这里是弧长)等于 AO 或者 BO(半径)的时候,我们就称这是 1 弧度。所以,我们得知角度与弧度的换算公式:一个圆 对应的角度为360度(角度),对应的弧度为2π(弧度)

等价公式 : 360(角度) = 2π(弧度) == > 180(角度) = π(弧度)

进一步换算我们可以得知下面两个公式:

公式一:角度 = 180 / π * 弧度

公式二:弧度 = π / 180 * 角度

论证:

公式一,当弧度为 2 弧度的时候,角度 = 180 / π * 2 π = 360度 

公式二,当角度为360度的是吧,弧度 = π / 180 * 360 = 2 π

img_2171c8b80a36b88419d800f02c7ec6e5.png

安卓自定义View基础 : 颜色

原来我对颜色的理解就是简单的RGB值,查阅了资料才发现颜色居然这么讲究,首先,安卓支持的颜色模式有以下四种:

img_49e28307c216fbfb663f48c30606a7af.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地址),文章请勿滥用,也希望大家尊重笔者的劳动成果,谢谢。

相关文章
|
7月前
|
Java Android开发 开发者
Android使用zxing生成二维码
这是一篇关于如何在Android应用中生成二维码的教程。首先,需要导入zxing库的jar包。布局文件中包含一个按钮、一个图片控件和一个输入框。用户可以在输入框中输入想要转换为二维码的内容,点击按钮后,程序会通过实例化QRCodeWriter类并使用for循环绘制二维码图像,最后将生成的二维码显示在ImageView上。源码展示了具体的实现细节,包括布局定义与Java逻辑代码,便于开发者理解和实践。
176 2
|
存储 Ubuntu 应用服务中间件
【Nginx】centos和Ubuntu操作系统下载Nginx配置文件并启动Nginx服务详解
【Nginx】centos和Ubuntu操作系统下载Nginx配置文件并启动Nginx服务详解
297 1
|
7月前
|
druid Java 关系型数据库
Spring Boot与Druid升级解决方案
好的,我需要帮助用户解决他们遇到的数据库连接问题,并升级项目的依赖。首先,用户提供的错误信息是关于Spring Boot应用在初始化数据源时抛出的异常,具体是Druid连接池验证连接失败。同时,用户希望升级项目的依赖版本。
673 10
|
移动开发 资源调度 JavaScript
Vue2使用触摸滑动插件(Swiper)
这篇文章介绍了在Vue 3框架中如何使用Swiper插件来创建不同类型的触摸滑动组件,包括轮播图、淡入淡出效果和走马灯效果,并提供了详细的配置选项和使用示例。
1071 1
Vue2使用触摸滑动插件(Swiper)
|
12月前
|
人工智能 并行计算 算法
谷歌量子计算机:开启计算新时代
谷歌量子计算机是现代信息技术的前沿成果,基于量子力学原理构建,具有超越经典计算机处理复杂问题的巨大潜力。谷歌通过研发“悬铃木”处理器等,实现了量子霸权,在量子化学模拟和优化问题求解等领域取得显著成就。尽管面临量子比特稳定性和纠错等挑战,谷歌持续创新,为新时代计算奠定基础。
325 16
|
人工智能 开发工具 git
第一次运行 Python 项目,使用 python-pptx 提取 ppt 中的文字和图片
人工智能时代,最需要学习的编程语言是:python 。笔者是个 python 小白,昨天花了两个小时,第一次成功运行起来 python 项目 。 项目是 powerpoint-extractor ,可以将 ppt 文件中的图片提取出来,并输出到固定的目录。
第一次运行 Python 项目,使用 python-pptx 提取 ppt 中的文字和图片
|
JSON 小程序 JavaScript
微信小程序引入Vant UI
微信小程序引入Vant UI
|
Linux 数据安全/隐私保护 Docker
MQTT(EMQX) - Linux CentOS Docker 安装
MQTT(EMQX) - Linux CentOS Docker 安装
826 0
|
网络协议 Java 测试技术

热门文章

最新文章