android事件分发ScrollView中嵌套listview

1.android事件分发简述

安卓应用的界面就是一层一层的view嵌套排列组合而成,对于某些终端view(里边不能再有view),比如Textview,用户触摸到这个控件,就是它孤身一人,所有事件都交给这个终端view处理了

Android的UI界面都是由View和ViewGroup及其派生类组合而成的。其中,View是所有UI组件的基类,而ViewGroup是容纳这些组件的容器,其本身也是从View派生出来的.

LinearLayout就是viewGroup的一种,LinearLayout里边可以放各种控件
LinearLayout的背景
这里写图片描述

事件分发说的就是 在viewGroup嵌套viewGroup的时候,我们点击了这个控件,谁来处理这个事件呢?通常先是最外层的控件来处理(即通常所说的消费, consumed),最外层不处理,交给里边的控件,一层一层,由外而内.如果我们想让谁来consume这个点击事件,就要根据情况来处理逻辑了.

如果自定义控件涉及到事件处理,一般都会重写onInterceptTouchEvent()和onTouchEvent()这两个方法,所以大家最关心的也是这两个方法,但其实dispatchTouchEvent()这个方法才是整个事件处理中最为重要的方法,特别是ViewGroup中的dispatchTouchEvent()方法。

那么讲了这么多铺垫,说下今天要说的问题,如果scrollview中嵌套listview,两者都可以滑动,如果不做处理,点击事件(称触摸事件更形象准确)就由最外层的scrollview来consume了,listview就不会滑动了.

2.简单处理方法

那么怎么办呢?

那就在activity中重写dispatchTouchEvent()方法

    @Override
    public boolean dispatchTouchEvent(MotionEvent ev) {
        if (ev.getAction() == MotionEvent.ACTION_MOVE) {
            listView.dispatchTouchEvent(ev);
        }
        return super.dispatchTouchEvent(ev);
    }

这样,达到的效果就是,在listview的控制区域有触摸事件,就由listview来处理了.
怎么样,是不是很简单?

推荐几篇相关文章:
Android事件分发机制完全解析,带你从源码的角度彻底理解(上)
Android事件分发机制完全解析,带你从源码的角度彻底理解(下)
Andriod 从源码的角度详解View,ViewGroup的Touch事件的分发机制

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值