Android面试补习(六)浅谈Android事件分发机制(对CSDN移动端的填坑意见反馈)

大家都知道,手机屏幕就那么大,但是要显示的界面却多之又多,那么作为一个成熟的APP最起码要理解用户的点击,滑动行为,到底是为了执行什么事件动作。比如现在很多的APP都是具有侧边栏+地步导航栏+viewpager这是很基础的界面。那么侧边栏一般都是右滑出现,但是不是每个界面右滑都需要出现,这就需要你做好事件的响应处理。再比如最近遇到的CSDN移动端的一个坑(其实觉得坑挺多的比如微信不能登录,经常不能收藏文章,明明网络很好却吐司告诉我网络连接失败),今天只讲他在事件处理这方面的坑。有图才有话语权。

操作是这样的,点击忘记密码然后就到了密码找回界面,下面有个滑动验证的功能,但是开始滑的地方距离左边屏幕边缘很近,需要手指按住滑块,但是却会界面直接滑出主界面。给人体验很不好,而且概率挺大的,虽然滑动其他区域不会滑出登陆界面,应该是做过处理的,靠近边缘,却滑回登陆界面。   操作如图,我给出我的建议,第一种:既然左上角已经有返回登陆界面的按钮,那是否可以取消滑动返回登陆的事件。第二张,若认为返回登陆界面2种方式都要保留,是否可以把滑动验证的滑块往右边移出来一点,避免一点滑块就触发返回登陆界面事件。

这是正常该有的操作。PS:该版本为V1.9.9.9

  好了,我觉得这样一个例子大家应该意识到对于一个APP的事件处理是很必要的。源码级的东西我就不和大家分享了,主要是让大家先对整体概念有一个意识。具体深入了解推荐《Android开发艺术探索》或者度娘。下面开始正题。

首先明确传递顺序。——>自上而下

即:Activity>Window>view

事件处理相关API  ——>dispatchTouchEvent() 、onInterceptTouchEvent()和onTouchEvent()

即:dispatchTouchEvent() 是否分发事件

       onInterceptTouchEvent()是否拦截该事件

       onTouchEvent()  如何处理点击事件  (附上一个及其简单的源码,相信大家一看就懂,复杂的源码就不说了)

        

public boolean dispatchTouchEvent(MotionEvent ev) {

          boolean consume=false;

        if(onInterceptTouchEvent(ev)){

            consume=onTouchEvent(ev);

        }else {

            consume=chils.dispathTouchEvent(ev);

        }

        return consume;

}

然后大家根据自己需要处理的界面是否对事件进行处理,就重写对应的方法就可以了。  再次声明,本人只做粗浅的概念分享,不保证百分之百完全正确,不讨论奇奇怪怪的特殊情况。有问题欢迎指出,欢迎大神教学。在下希望得到学习的机会。谢谢。(文章末尾提醒大家,调用侧边栏的第三方框架,一般都会提供当前页面是否可以滑出的方法,大家可以仔细查找一下)

展开阅读全文

没有更多推荐了,返回首页