吐槽
开一个新的学习线程吧,不然老看那些看不懂的东西感觉头大唉,项目还在苦逼的赶,但是学新东西必须加快速度了。
本文主要内容
- 安卓的坐标系
- 角度和弧度
- 颜色
参考资料《安卓艺术开发》
http://www.gcssloop.com/customview/Color
https://www.jianshu.com/p/146e5cec4863
安卓的坐标系
安卓因为和手机很相关,所以它这块的坐标系也和之前学的数学的坐标系不一样
android的坐标系定义
1屏幕的左上角为坐标原点
2向右为x轴增大方向
3向下为y轴增大方向
View的位置描述
下面两点很重要
- View的位置是相对于父控件而言的
- View的位置由4个顶点决定的
根据上图我们很容易得到View的宽高和坐标的关系
width = right - left
height = bottom - top
这四个参数也很容易得出来
Top = getTop() //子View上边界到父view上边界的距离
Left = getLeft() //子View左边界到父view左边界的距离
Bottom = getBottom() //子View下边距到父View上边界的距离
Right = getRight() //子View右边界到父view左边界的距离
从Android3.0开始,view又额外增加了几个参数
x:View左上的x坐标
y:View左上的y坐标
translationX:View左上角相对于父容器x的偏移值
translationY:View左上角相对于父容器y的偏移值
换算关系:x = left + translationX
y = top + translationY
注意点:
View在平移的过程中,top和left表示的是原始左上角的位置信息,不会改变
改变的是x,y,translationX,translationY这四个值
Android的角度(angle)与弧度(radian)
自定义View实际上是将一些简单的形状通过计算,从而组合到一起形成的效果。
但是感觉自己的三角函数都忘完了,就很尴尬啊
角度
两条射线从圆心向圆周射出,形成一个夹角和夹角正对的一段弧。当这段弧长正好等于圆周长的360分之一时,两条射线的夹角的大小为1度.
弧度
两条射线从圆心向圆周射出,形成一个夹角和夹角正对的一段弧。当这段弧长正好等于圆的半径时,两条射线的夹角大小为1弧度.
两者的转换
圆一周对应的角度为360度(角度),对应的弧度为2π弧度。
故得等价关系:360(角度) = 2π(弧度) ==> 180(角度) = π(弧度)
rad 是弧度, deg 是角度
rad = deg x π / 180
deg = rad x 180 / π
注意点:
在默认的屏幕坐标系中角度增大方向为顺时针。
颜色
这块写项目时候都是产品给好的,但是自己也要了解下的
Android中的颜色相关内容包括颜色模式,创建颜色的方式,以及颜色的混合模式等。
颜色模式
Android支持的颜色模式:
PS:其中字母表示通道类型,数值表示该类型用多少位二进制来描述。如ARGB8888则表示有四个通道(ARGB),每个对应的通道均用8位来描述。
注意:我们常用的是ARGB8888和ARGB4444,而在所有的安卓设备屏幕上默认的模式都是RGB565,请留意这一点。
使用颜色的方式
1 java里面定义
int color = Color.GRAY; //灰色
由于Color类提供的颜色仅为有限的几个,通常还是用ARGB值进行表示
int color = Color.argb(127, 255, 0, 0); //半透明红色
int color = 0xaaff0000; //带有透明度的红色
2 在xml文件里面
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="red">#ff0000</color>
<color name="green">#00ff00</color>
</resources>
定义颜色以‘#’开头,后面跟十六进制的值,有如下几种定义方式:
#f00 //低精度 - 不带透明通道红色
#af00 //低精度 - 带透明通道红色
#ff0000 //高精度 - 不带透明通道红色
#aaff0000 //高精度 - 带透明通道红色
3.在xml文件(layout或style)中引用或者创建颜色
<!--在style文件中引用-->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="colorPrimary">@color/red</item>
</style>
android:background="@color/red" //引用在/res/values/color.xml 中定义的颜色
android:background="#ff0000" //创建并使用颜色
注意点
- 任何颜色都是由三原色组成(RGB),即红绿蓝分量取值介于0-255之间(8位表示)
- #ffffffff 颜色格式的含义 ; 后三个分量即RGB颜色模式中的参数,第一个alpha分量指透明的程度。当alpha分量为255时,表示完全不透明,正常显示;当alpha分量为0时,表示完全透明,前三个分量不起作用,而介于0~255之间的值可以制造出颜色不同的层次效果。
- 颜色的表示有多种方式,为了后期的项目管理,颜色都要在value的color.xml中维护
- AA 指定透明度。 00 是完全透明。 FF 是完全不透明,超出取值范围的值将被恢复为默认值。
总结
感觉自己之前不懂的很多地方,大概理解是怎么回事了,这方面还是要好好学