View体系

一、视图座标系
在视图座标中我们可以通过如下方法可以获得View到其父控件(ViewGroup)的距离:
getTop() 获取View自身底边到其父布局顶边的距离
getLeft() 获取View自身左边到其父布局左边的距离
getRight() 获取View自身右边到其父布局左边的距离
getBottom() 获取View自身底边到其父布局顶边的距离
获取焦点坐标的方法:
getX() 返回值为getLeft()+getTranslationX(),当setTranslationX()时getLeft()不变,getX()变。
getY() 返回值为getTop()+getTranslationY(),当setTranslationY()时getTop()不变,getY()变。
getRawX() 获取点击事件距离整个屏幕左边距离,即绝对坐标
getRawY() 获取点击事件距离整个屏幕顶边的的距离,即绝对坐标
二、实现View滑动的六种方法

使用layout的方法;
使用offsetLeftAndRight()与offsetTopAndBottom();
使用LayoutParams();
使用scrollTo()与scrollBy();
使用Scroller类
使用属性动画

二、实现View滑动的六种方法

使用layout的方法;
使用offsetLeftAndRight()与offsetTopAndBottom();
使用LayoutParams();
使用scrollTo()与scrollBy();
使用Scroller类
使用属性动画

1.使用onLayout的方法可以试着view的位置,那么我们就可以通过改变left,right,top,bottom来使View移动,结合MontionEvent来实现view跟着手指的滑动移动。

2.使用offsetLeftAndRight()与offsetTopAndBottom()和Layout方法一样,都是对左上右下移动的一个封装
offsetLeftAndRight()是对左右的一个封装
offsetTopAndBottom()是对上下的一个封装

3.使用LayoutParams()
我们可以使用LayoutParams的方法来实现view的移动,LayoutParams可以设置view的位置,也可以通过geLayoutParams方法来获得当前view的位置。自然也可以使用setLayoutParams方法来修改View的位置,结合TouchEvent方法就可以让View进行变动。

属性动画的属性值:
translationX和translationY:这两个属性作为增量控制View对象从他的布局容器的左上角开始位置。
rotation、rotationX、rotationY:这三个属性控制View对象围绕它的支点进行2D和3D旋转。
PrivotX和PrivotY:控制View对象的支点位置,围绕这个支点进行旋转和缩放变换处理。默认该支点位置就是View对象的中心点。
alpha:透明度,默认是1(不透明),0代表完全透明。
x和y:描述View对象在它容器中的最终位置,它是最初的做上角坐标和translationX,translationY值的累计的和。

动画的监听
完整的动画具有start,Repeat,End,Cancel四个过程:
after(Animator anim) 将现有动画插入到传入的动画之后执行
after(long delay) 将现有动画延迟指定毫秒后执行
before(Animator anim) 将现有动画插入到传入的动画之前执行
with(Animator anim) 将现有动画和传入的动画同时执行

Scroller的构造函数
要想使用Scroller,必须先调用new Scroller(),我们先来看看Scroller的构造函数:
Scroller有三个构造函数,通常情况我们都用第一种,第二种需要传进去一个差值器Interpolator ,如果不传则采用默认的差值器(viscous)。

点击事件分发的重要方法
点击事件有三个重要的方法它们分别是:

dispatchTouchEvent(MotionEvent ev):用来进行事件的分发
onInterceptTouchEvent(MotionEvent ev):用来进行事件的拦截,在dispatchTouchEvent()中调用,需要注意的是View没有提供该方法
onTouchEvent(MotionEvent ev):用来处理点击事件,在dispatchTouchEvent()方法中进行调用

点击事件由下而上的传递规则
点击事件传给最底层的View,如果他的onTouchEvent()方法返回true,则事件由最底层的View消耗并处理了,如果返回false则表示该View不做处理,则传递给父View的onTouchEvent()处理,如果父View的onTouchEvent()仍旧返回返回false,则继续传递给改父View的父View处理,如此的反复下去。

View的measure流程
MeasureSpec类帮助我们来测量View,测量模式分为三种:
UNSPECIFIED:未指定模式,View想多大就多大,父容器不做限制,一般用于系统内部的测量。
AT_MOST:最大模式,对应于wrap_comtent属性,只要尺寸不超过父控件允许的最大尺寸就行。
EXACTLY:精确模式,对应于match_parent属性和具体的数值,父容器测量出View所需要的大小,也就是specSize的值。

你可能感兴趣的:(View体系)