CustomView
This commit is contained in:
62
CustomView/Base/[1]CoordinateSystem.md
Normal file
62
CustomView/Base/[1]CoordinateSystem.md
Normal file
@@ -0,0 +1,62 @@
|
||||
# 安卓中的坐标系
|
||||
### 作者微博: [@GcsSloop](http://weibo.com/GcsSloop)
|
||||
|
||||
## 一.屏幕坐标系和数学坐标系的区别
|
||||
由于移动设备一般定义屏幕左上角为坐标原点,向右为x轴增大方向,向下为y轴增大方向,
|
||||
所以在手机屏幕上的坐标系与数学中常见的坐标系是稍微有点差别的,详情如下:
|
||||
|
||||
(**PS:其中的∠a 是对应的,注意y轴方向!**)
|
||||
|
||||

|
||||

|
||||
|
||||
**实际屏幕上的默认坐标系如下:**
|
||||
|
||||
> PS: 假设其中棕色部分为手机屏幕
|
||||
|
||||

|
||||
|
||||
## 二.View的坐标系
|
||||
|
||||
**注意:View的坐标系统是相对于父控件而言的.**
|
||||
|
||||
``` java
|
||||
getTop(); //获取子View左上角距父View顶部的距离
|
||||
getLeft(); //获取子View左上角距父View左侧的距离
|
||||
getBottom(); //获取子View右下角距父View顶部的距离
|
||||
getRight(); //获取子View右下角距父View左侧的距离
|
||||
```
|
||||
**如下图所示:**
|
||||
|
||||

|
||||
|
||||
## 三.MotionEvent中 get 和 getRaw 的区别
|
||||
```
|
||||
event.getX(); //触摸点相对于其所在组件坐标系的坐标
|
||||
event.getY();
|
||||
|
||||
event.getRawX(); //触摸点相对于屏幕默认坐标系的坐标
|
||||
event.getRawY();
|
||||
|
||||
```
|
||||
**如下图所示:**
|
||||
|
||||
> PS:其中相同颜色的内容是对应的,其中为了显示方便,蓝色箭头向左稍微偏移了一点.
|
||||
|
||||

|
||||
|
||||
## 四.核心要点
|
||||
|
||||
序号 | 要点
|
||||
:---:|----
|
||||
1 | 在数学中常见的坐标系与屏幕默认坐标系的差别
|
||||
2 | View的坐标系是相对于父控件而言的
|
||||
3 | MotionEvent中get和getRaw的区别
|
||||
|
||||
## 五.参考文章:
|
||||
[Android 屏幕(View)坐标系统](http://blog.csdn.net/wangjinyu501/article/details/21827341)
|
||||
|
||||
## About Me
|
||||
|
||||
<a href="https://github.com/GcsSloop/SloopBlog/blob/master/FINDME.md" target="_blank"> <img src="http://ww4.sinaimg.cn/large/005Xtdi2gw1f1qn89ihu3j315o0dwwjc.jpg" width=300 height=100 /> </a>
|
||||
|
||||
70
CustomView/Base/[2]AngleAndRadian.md
Normal file
70
CustomView/Base/[2]AngleAndRadian.md
Normal file
@@ -0,0 +1,70 @@
|
||||
# 角度与弧度
|
||||
|
||||
安卓中角度(angle)与弧度(radian)的有关问题。
|
||||
|
||||
## 一.前言
|
||||
|
||||
### 1.为什么讲这个?
|
||||
|
||||
在我们自定义View,尤其是制作一些复杂炫酷的效果的时候,实际上是将一些简单的东西通过数学上精密的计算组合到一起形成的效果。
|
||||
|
||||
这其中可能会涉及到画布的相关操作(旋转),以及一些正余弦函数的计算等,这些内容就会用到一些角度、弧度相关的知识。
|
||||
|
||||
### 2.为什么对角的描述存在角度与弧度两种单位?
|
||||
|
||||
简单来说就是为了方便,为了精确描述一个角的大小引入了角度与弧度的概念。
|
||||
|
||||
由于两者进制也是不同的(**角度是60进制,弧度是10进制**),在合适的地方使用合适的单位来描述会更加方便。
|
||||
|
||||
> **例如:**
|
||||
角度是60进位制,遇到30°6′这样的角,应该转化为10进制的30.1°。但弧度就不需要,因为弧度本身就是十进制的实数。
|
||||
|
||||
|
||||
## 二.角度与弧度的定义
|
||||
|
||||
角度和弧度一样都是描述角的一种度量单位,下面是它们的定义:
|
||||
|
||||
名称 | 定义
|
||||
:---:| ---
|
||||
角度 | 两条射线从圆心向圆周射出,形成一个夹角和夹角正对的一段弧。**当这段弧长正好等于圆周长的360分之一时,两条射线的夹角的大小为1度.**
|
||||
弧度 | 两条射线从圆心向圆周射出,形成一个夹角和夹角正对的一段弧。**当这段弧长正好等于圆的半径时,两条射线的夹角大小为1弧度.**
|
||||
|
||||
**如图:**
|
||||
|
||||

|
||||

|
||||
|
||||
|
||||
## 三.角度和弧度的换算关系
|
||||
根据角度和弧度的的定义和圆的相关知识非常容易就能得出两者的换算公式:
|
||||
|
||||
先设圆的周长为C. 半径为r
|
||||
|
||||
C = 2πr;
|
||||
|
||||
一周对应的角度为360度(角度),对应的弧度为2π弧度。
|
||||
|
||||
故: **180度 = π弧度.**
|
||||
|
||||
可得:
|
||||
|
||||
**弧度 = 角度xπ/180**
|
||||
|
||||
**角度 = 弧度x180/π**
|
||||
|
||||
|
||||
## 四.一些细节问题
|
||||
由于默认屏幕坐标系和常见数学坐标系的小差别([坐标系详情点这里](https://github.com/GcsSloop/AndroidNote/blob/master/%E9%97%AE%E9%A2%98/%E5%9D%90%E6%A0%87%E7%B3%BB/%E5%9D%90%E6%A0%87%E7%B3%BB.md)),所以在角度上必然也会存在一些区别,例如:
|
||||
|
||||
**在常见的数学坐标系中角度增大方向为逆时针,**
|
||||
|
||||
**在默认的屏幕坐标系中角度增大方向为顺时针。**
|
||||
|
||||

|
||||
|
||||
## About Me
|
||||
### 作者微博: [@GcsSloop](http://weibo.com/GcsSloop)
|
||||
<a href="https://github.com/GcsSloop/SloopBlog/blob/master/FINDME.md" target="_blank"> <img src="http://ww4.sinaimg.cn/large/005Xtdi2gw1f1qn89ihu3j315o0dwwjc.jpg" width=300 height=100 /> </a>
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user