一. View的体系结构
view是Android 所有控件的基类,ViewGroup相当于View的结合,一些Layout,如FrameLayout、LinearLayout和RelativeLayout都是继承于ViewGroup。
二. View的属性
- getTop()
- getButtom()
- getRight()
- getLeft()
- getHeiht()
- getWidth()
View通过点击事件点击到的点也能通过MotionEvent得到信息:
- getX() 点到控件左边的距离
- getY() 点到控件顶边的距离
- getRawX() 点到屏幕左边的距离
- getRawY() 点到屏幕右边的距离
三. View的滑动
- layout() 传参左上右下
- offsetLeftAndRight() 和 offsetTopAndButtom() 左右上下
- setLayoutParams 直接设置参数
- 动画 添加动画之后这个view会回到之前的位置,除非设置fillAfter=“true”
- scrollATo()位移到的位置 scrollBy()位移的多少
- scroller 第五节详细介绍
四. Animator动画
- ObjectAnimoator:
静态工厂:ObjectAnimator.ofFloat(view,propertiesName,values)其中propertiesName包括:
translationX、translationY平移、rotation、rotationX、rotationY围绕View支点旋转、alpha透明度、x、y最终位置
- ValueAnimator 数值发生器,产生一定规律的数字,让调用者控制动画的过程
- 动画有四个状态:start,repeat,end,cancel,我们可以对这几个过程进行监听。大部分时间onAnimationEnd这个过程比较重要。
- 动画组:AnimatorSet(建造者模式 AnimatorSet.builder)
函数 | 解释 |
---|---|
after(Animator anim) | 现有动画插入到传入动画之后执行 |
after(Animator anim) | 现有动画延迟指定毫秒后执行 |
before(Animator anim) | 现有动画插入到传入动画之前 |
with(Animator anim) | 将现有动画和传入动画同时执行 |
五. Scroller的执行过程
六. View的组成
其中,Activity包含一个Window对象,这个对象是由PhoneWindow来实现的,PhoneWindow将DecorView作为整个应用窗口的根View,DecorView将屏幕分成两个FrameLayout,一个是TitleView,一个是ContentView。
七. 事件分发机制
写一段事件分发的伪代码:
public boolean dispatchTouchEvent(MotionEvent ev){
boolean result = false;
if(onInterceptTouchEvent(ev)){
result = super.onTouchEvent(ev);
}else{
result = child.disatchTouchEvent(ev);
}
return result;
}
点击事件是从上往下的传递规则,当点击事件产生后,由Activity来处理,传递给PhoneWindow,再传递给DecorView,最后传递给顶层的viewGroup。
如果该ViewGroup的onInterceptTouchEvent方法返回true代表他要拦截这个事件,这个事件就会交给这个view的onTouchEvent来处理,如果返回false则代表他不拦截这个事件,交给他的子元素dispatchTouchEvent来处理,所以,一直到最底层的View,由于View没有子View,就会调用该View的onTouchEvent方法。
点击事件的处理是从下而上的,传到底层的View时,如果这个View不能处理(OnTouchEvent返回false),那么回传递给父类,调用他的onTouchEvent()处理,以此类推,直到被处理。