ViewGroup 学习

布局 

/**
* 当此View分配大小和位置给子View时被调用。子类的派生类应该重写这个方法,并通过childView.layout(int, int, int,
* int)回调每个他们子类的onLayout(boolean, int, int, int, int)。

* 参数:
*     changed 分配给子View的面积位置是否变化
*     l 相对父类左边的位置
*     t 相对父类顶边的位置
*     r 相对父类右边的位置
*     b 相对父类下边的位置
* */
protected void onLayout(boolean changed, int l, int t, int r, int b) {
...
}

事件

/**
* 实现这个方法去拦截所有的触屏事件. 由于通过此方法将事件分配给子View,所以可以监视所有的分配事件, 并且可以拿到任何点上的当前手势的所有权.

* 使用这个方法需要注意, 因为它和View.onTouchEvent(MotionEvent)有着复杂的交互作用,
* 使用的时候需要实现View.onTouchEvent(MotionEvent)且是正确方式. 事件将以下面的顺序传递:

* 1. 接受到down event. 
* 2. 这个down event事件要么被此View的子View处理,要么被此View的onTouchEvent(MotionEvent)处理;
*  这意味着你需要实现onTouchEvent(MotionEvent)方法去返回true,
*  所以你需要继续处理其余的手势,而不是寻找一个父视图来处理.
*  此外,onTouchEvent(MotionEvent)返回true以后,onInterceptTouchEvent
*  (MotionEvent)不会收到任何Touch事件,所有接下来的Touch事件发生在onTouchEvent(MotionEvent)里面。
* 3. 只要你从此方法返回false, 每个接下来的事件(up to and including the final up)
*  首先被投递到这儿,然后再传递到目标的onTouchEvent().(但如果此View的onTouchEvent(MotionEvent)返回了true,则不会接受到接下来的事件了) 
* 4. 如果你返回true, 将不能接受到接下来的任何Touch事件:
*  目标View将接受到MotionEvent.ACTION_CANCEL,
*  所有接下来的事件将被传递到此View的onTouchEvent()方法,不再出现在这里.

* 在ViewGroup中被重写

* 参数: 
*     ev 即将分配到子View上的Touch事件。 
* 返回值:
*     返回true去偷取子View的Touch事件,并且必须将事件分配给此View的onTouch(MotionEvent)发放.
*     当前的View将接受到ACTION_CANCEL事件, 接下来的所有Touch事件不会传递到这儿.
* */

public boolean onInterceptTouchEvent(MotionEvent ev) {
...
}
注释:请参见View中方法:onTouchEvent(MotionEvent ev)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值