Android面试补习(六)浅谈Android事件分发机制(对CSDN移动端的填坑意见反馈)
2018-03-15 10:12
513 查看
大家都知道,手机屏幕就那么大,但是要显示的界面却多之又多,那么作为一个成熟的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;
}
然后大家根据自己需要处理的界面是否对事件进行处理,就重写对应的方法就可以了。 再次声明,本人只做粗浅的概念分享,不保证百分之百完全正确,不讨论奇奇怪怪的特殊情况。有问题欢迎指出,欢迎大神教学。在下希望得到学习的机会。谢谢。(文章末尾提醒大家,调用侧边栏的第三方框架,一般都会提供当前页面是否可以滑出的方法,大家可以仔细查找一下)
操作是这样的,点击忘记密码然后就到了密码找回界面,下面有个滑动验证的功能,但是开始滑的地方距离左边屏幕边缘很近,需要手指按住滑块,但是却会界面直接滑出主界面。给人体验很不好,而且概率挺大的,虽然滑动其他区域不会滑出登陆界面,应该是做过处理的,靠近边缘,却滑回登陆界面。 操作如图,我给出我的建议,第一种:既然左上角已经有返回登陆界面的按钮,那是否可以取消滑动返回登陆的事件。第二张,若认为返回登陆界面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;
}
然后大家根据自己需要处理的界面是否对事件进行处理,就重写对应的方法就可以了。 再次声明,本人只做粗浅的概念分享,不保证百分之百完全正确,不讨论奇奇怪怪的特殊情况。有问题欢迎指出,欢迎大神教学。在下希望得到学习的机会。谢谢。(文章末尾提醒大家,调用侧边栏的第三方框架,一般都会提供当前页面是否可以滑出的方法,大家可以仔细查找一下)
相关文章推荐
- Android面试系列文章2018之Android部分事件分发机制篇
- 浅谈Android事件分发机制
- 浅谈Android 的事件分发机制
- 浅谈Android 触摸事件分发机制
- "Android Touch事件分发机制"-Android面试必问"精华技能点"汇总
- 【Android面试笔记】(一)事件分发机制
- 搜狐面试- Android事件分发机制完全解析,带你从源码的角度彻底理解(上)
- Android知识架构 · 电话面试 · Android事件分发机制
- 浅谈android的事件分发机制
- 全面升级Android面试之事件分发机制
- 搜狐面试- Android事件分发机制完全解析,带你从源码的角度彻底理解(下)
- 浅谈Android事件分发机制(一)点击事件的传递规则
- 浅谈android事件分发机制
- 浅谈android view事件分发机制
- Android——浅谈事件分发机制
- Android面试准备:事件分发机制
- Android事件分发机制完全解析,带你从源码的角度彻底理解(下)
- Android事件分发机制——View(一)
- Android事件分发机制完全解析,带你从源码的角度彻底理解(上)
- Android中View的事件分发机制