android 事件传递机制

1. dispatchTouchEvent :
功能:负责由上向下分发事件
false:表示该事件向下传递流程终结,将事件返回给上一级控件的 onTouchEvent 处理
true:表示该事件传递过程就此终结,事件被消费
super:调用父类的方法,表示该事件向下一级的 dispatchTouchEvent 传递


2.onInterceptTouchEvent :
功能:只有ViewGroup 才有这个方法,负责拦截事件
false,super:表示不拦截,事件向下一级的 dispatchTouchEvent 传递
true:表示事件被拦截,事件将由当前的 ViewGroup 的 onTouchEvent 处理

3.onTouchEvent :

功能:负责由下向上分发事件
false,super:表示事件向上一级控件的 dispatchTouchEvent 传递
true: 事件自己消费


4.onTouch :
功能:当view 或 ViewGroup 被触摸时调用
这个方法是在 dispatchTouchEvent 里面被调用的


4.onClick :
功能:当view 或 ViewGroup 被点击时调用

这个方法是在 onTouchEvent 里面被调用的


解决滑动冲突:一般滑动冲突的原因都是因为嵌套导致的,例如 PullToRefreshListView 里面嵌套 ListView:

冲突的原因是因为 PullToRefreshListView  里面的 ListView 是继承 AbsListView的,而AbsListView 在他的 onInterceptTouchEvent() 方法里进行了某些动作的拦截,

解决方法:

 listview.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                Log.i("onTouch", "listview:" + event.getAction());
                if (event.getAction() == MotionEvent.ACTION_UP) {
                    refreshListView.getRefreshableView().requestDisallowInterceptTouchEvent(false);
                } else {//现获取 PullToRefreshListView 中的 ListView 然后设置不拦截
                    refreshListView.getRefreshableView().requestDisallowInterceptTouchEvent(true);
                }
                return false;
            }
        });

先暂时记下,以后整理

详细请参考:http://www.jianshu.com/p/e99b5e8bd67b#


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值