View 的学习笔记一

1、view 的事件分发机制理解三个概念:dispatchKeyEvent、onTouchEvent与onInterceptTouchEvent
     用伪代码总结为:
dispatchkeyevent(event) {
if(onInteceptTouchEvent(event)) {
      return onTouchEvent(event);
} else {
      return childview.dispatchkeyEvent(event)
}
}

2、view的onTouch比onTouchEvent方法优先级高,如果view有设置ontouchListener则执行onTouch方法
3、Scroller类的理解
scroller类实际在view的滑动过程中并没有实际去操作view的滑动,它本身担当的角色是一个指导员的角色,引导view去进行怎样的滑动,实际的滑动是调用了view 的scrollto或者scrollby的方法,scrollto是指滑动到一个坐标点,scrollby是指滑动了多少距离到达某一个点,需要注意的是这里移动的都是view的内容,并没有移动view本身的位置;

public void scrollTo(int x, int y) {
           if (mScrollX != x || mScrollY != y) {
               int oldX = mScrollX;
               int oldY = mScrollY;
                mScrollX = x;
               mScrollY = y;
               onScrollChanged(mScrollX, mScrollY, oldX, oldY);
               invalidate();
            }
       }
public void scrollBy(int x, int y) {
           scrollTo(mScrollX + x, mScrollY + y);
        }

从源码可以看出scrollBy最终也是调用了scrollto的方法,对同一个view调用两次scrollTo(10,10)只会移动一次,而调用两次scrollBy(10,10)会移动两次,实际x方向移动的距离为20.y方向也为20
通常Android上应用一些炫酷的拖动的界面都是继承重写了viewgroup的一些方法, view 的computescroll方法会在父容器重绘时调用到(viewgroup的重绘必定会引起外层父容器的重绘,而父容器的重绘会在drawchild()方法中调用到child.computeScroll()).

4、view类中的mScrollX与mScrollY:scrollx、scrolly分别为屏幕左边缘在整个view的坐标点的x、y坐标,view的原点为界面初始化时与屏幕左边缘重叠时的点








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值