一、学习脑图
二、View基础
2.1 什么是View
?
Q1:怎么理解View
?
View
是界面层的控件的一种抽象,代表了一个控件。- 是
android
在视觉上的呈现。- 是所有控件是基类,可以是单个控件
View
可以是一组控件ViewGroup
。
Q2:View
的重要性?
View
在Android
中是一个十分重要的概念,虽然说View
不属于四大组件,但是它的作用堪比四大组件,在开发中,Activity
承担了可视化的功能,Android
提供了很多基础的控件,当我们不满足于这些基础控件的功能时,可以用自定义控件,而控件的自定义就需要对View
体系有深入的了解。
2.2 View
的位置参数
Android
系统中,有两种坐标系,分别是Android
坐标系和View
坐标系。
2.2.1 Android
坐标系
- 将屏幕左上角作为坐标原点
- 原点向右是X轴正方向
- 原点向下是Y轴正方向
注意:使用
getRawX()
和getRawY()
方法获得的坐标是Android坐标系的坐标
2.2.2 View
坐标系
Q1:View
的位置由什么来决定?
四个顶点:top
(左上角纵坐标)、left
(左上角横坐标)、right
(右下角横坐标)、bottom
(右下角纵坐标)
注意:这些坐标都是相对于父容器来说的,是一种相对坐标
Top = getTop()
,Left = getLeft()
,Right = getRight()
,Bottom=getBottom()
自Anroid3.0后,增加了
x
、y
、translationX
、translationY
这几个参数。
x
、y
:View
左上角的坐标translationX
、translationY
:左上角相对于父容器的偏移量
注意:View
在平移过程中,top
和left
表示原始左上角的位置信息,发生改变的值是x
、y
、translationX
、translationY
这四个参数。
Q2:getX()
、getY()
和getRawX()
、getRawY()
有什么区别?
getX
和getY
是视图坐标,是相对于控件的距离
getRawX
和getRawY
是绝对坐标,是与整个屏幕的距离
Q3:View
怎么获取自身的宽和高?
width
=getRight()
-getLeft()
=getWidth()
height
=getBottom()
-getTop()
=getHeight()
2.2.3 View
的触控
2.2.3.1 MotionEvent
手指接触屏幕后所产生的一系列事件。
ACTION_DOWN
—— 手指刚接触屏幕ACTION_MOVE
—— 手指在屏幕上移动ACTION_UP
—— 手指从屏幕上松开的一瞬间
正常情况下,触摸屏幕会出现以下两种情况
- 点击屏幕后松开,DOWN -> UP
- 点击屏幕滑动后再松开,DOWN->MOVE->…->MOVE->UP
2.2.3.2 TouchSlop
TouchSlop
是系统所能识别出的被认为是滑动的最小距离,是一个常量。
Q1:怎么获取这个常量?
ViewConfiguration.get(getContext()).getScaledTouchSlop()
。
Q2:这个常量有什么意义?
在处理滑动时,可以利用这个常量来进行过滤,当两次滑动事件的滑动距离小于这个常量时,可以认为它们不是滑动。
2.2.3.3 VelocityTracker
速度追踪,用于追踪手指在滑动过程中的速度,包括水平和竖直速度。
Q:怎么使用VelocityTracker
?
1.在View
的onTouchEvent
方法中追踪当前点击事件的速度
VelocityTracker velocityTracker = VelocityTracker.obtain();
velocityTracker.addMovement(event);
2.获取当前速度
velocityTracker.computeCurrentVelocity(1000);
int xVelocity = (int)velocityTracker.getXVelocity();
int yVelocity = (int)velocityTracker.getYVelocity();
注意:
获取速度之前需要先计算速度,即
getXVelocity()
和getYVelocity()
方法前必须先调用velocityTracker.computeCurrentVelocity(1000)
;