安卓自定义View(一)---基础

吐槽

开一个新的学习线程吧,不然老看那些看不懂的东西感觉头大唉,项目还在苦逼的赶,但是学新东西必须加快速度了。

本文主要内容

  • 安卓的坐标系
  • 角度和弧度
  • 颜色

参考资料《安卓艺术开发》
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 是完全不透明,超出取值范围的值将被恢复为默认值。

总结

感觉自己之前不懂的很多地方,大概理解是怎么回事了,这方面还是要好好学

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值