Android事件分发机制在实战开发中的应用之一
学习的最终目标就是要学以致用,本文所分享的案例都是自己在公司实战开发过程中的真实案例,现在把它分享出来,希望对初学者有所帮助
版权声明:本文来自门心叼龙的博客,属于原创内容,转载请注明出处:https://blog.csdn.net/geduo_83/article/details/90145083
github源码下载地址:https://github.com/geduo83/android-touch-event
Android事件分发机制的探索与发现之View篇
Android事件分发机制的探索与发现之ViewGroup篇
Android事件分发机制的探索与发现之Activity篇
Android事件分发机制的探索与发现之总结篇
Android事件分发机制在实战开发中的应用之一
Android事件分发机制在实战开发中的应用之二
通过对前面几篇文章的学习,我想现在大家对这块的知识已经有了一个比较全面理解和认识,就在上个周我在公司面试了两位android开发工程师,当然事件分发这么重要的问题也是必考题,有一位对View和ViewGroup对onTouchEvent方法调用父类同名方法时流程搞错了,另外一位对ViewGroup的dispatchTouchEvent和onTouchevent方法先后调用顺序搞不清楚,我问他们这块以前研究过没有?他们都说学习过,但是过一阵就忘记了,在自己实际工作中好像用不到这些知识,学了没有用,而导致对这块理解不深刻,而网上大部分文章也只是讲讲理论,所以我打算写几篇实战案例的文章,来帮助大家来理解这块的知识点。
扩大小按钮的事件点击范围
我们在平时的实战开发过程中经常会碰到这样的一些需求,我们要点击一个小按钮弹出一个DialogFragment或者点击之后跳转到另外一个界面上去,我们发现由于按钮太小了不容易点击,这样的体验非常不好,怎么办?
效果图
很多长人肯定会说给View加个Padding就行了嘛,是的这样可以解决问题,但是你有没有想过如果该View有背景图,结果你加了个Padding ,View的背景图变形了,这种情况下通过加Padding加大点击范围的方案就行不通了,如何破解?其实很简单,稍微懂点脑筋就把这个问题解决了,我们给这个小按钮外围包裹一个LinearLayout或RelativeLayout,当我们点击外围的LinearLayout或RelativeLayout的时候把这个事件传递给小按钮问题立马就解决了关键代码:
public class FatArrowView extends RelativeLayout {//拦截事件@Overridepublic boolean onInterceptTouchEvent(MotionEvent ev) {Log.v(TAG,"onInterceptTouchEvent start...");return true;}//把事件分发给我们的子View CheckBox@Overridepublic boolean onTouchEvent(MotionEvent event) {Log.v(TAG,"onTouchEvent start...");//当手指离开屏幕的时候设置CheckBox的状态if (event.getAction() == MotionEvent.ACTION_UP){ischeck = !ischeck;mCheckBox.setChecked(ischeck);}return true;}
}
SettingBar的点击事件拦截
接下来我们再来看另外一个案例,正如上面界面上显示的两个条目,车辆选择和始发地点选择,他们都有一个共同的特点就是都有共同的标题,内容和右剪头按钮,这种情况下我们都会把它封装成一个组合的自定义View来显示它,我们现在来看一下它的
效果图:
用户的需求是这样的: 当用户在点击车辆选择的条目的时候他会跳转到另外一个页面上去,而用户在事发地点上点击请输入的时候是可以输入文字信息的,也就是说有两种需求,一种处于不可编辑状态点击整个条目要进行事件拦截,另外一种处于可编辑状态事件,点击请输入需要弹出软键盘可输入文字,也就是点击的时候不需要拦截可直接传递给子View EditText,很显然我们的自定义设置条目需要一个是否可以编辑的开关,当处于不可编辑的状态的时候,点击的时候拦截该事件,当处于可编辑状态的时候,事件可以继续往下分发。关键代码:
public class SettingBarView extends RelativeLayout {@Overridepublic boolean onInterceptTouchEvent(MotionEvent ev) {//当处于不可编辑状态的时候拦截该事件,否则该事件就继续往下分发return !isEdit;}@Overridepublic boolean onTouchEvent(MotionEvent event) {//当拦截该事件的时候就把它分发给自己的根View,响应全局的点击事件return layoutSettingBar.onTouchEvent(event);}
}
好了,今天的两个小案例就讲完了,需求很简单,通过这两个案例的实操,我们进一步的加深了android事件分发机制的理解,项目案例的完整代码我已经分享到github上了,使用过程中有任何问题,请在文章下方留言,下一篇我们讲一个更加复杂的案例,来进一步帮助大家理解事件分发机制在实战开发当中的应用。
github源码下载地址:https://github.com/geduo83/android-touch-event
Android事件分发机制在实战开发中的应用之一相关推荐
- Android事件分发机制在实战开发中的应用之二
学习的最终目标就是要学以致用,本文所分享的案例都是自己在公司实战开发过程中的真实案例,现在把它分享出来,希望对初学者有所帮助 版权声明:本文来自门心叼龙的博客,属于原创内容,转载请注明出处:https ...
- 【朝花夕拾】Android自定义View篇之(六)Android事件分发机制(中)从源码分析事件分发机制...
前言 转载请注明,转自[https://www.cnblogs.com/andy-songwei/p/11039252.html]谢谢! 在上一篇文章[[朝花夕拾]Android自定义View篇之(五 ...
- 【朝花夕拾】Android自定义View篇之(六)Android事件分发机制(中)从源码分析事件分发逻辑及经常遇到的一些“诡异”现象
前言 转载请注明,转自[https://www.cnblogs.com/andy-songwei/p/11039252.html]谢谢! 在上一篇文章[[朝花夕拾]Android自定义View篇之(五 ...
- Android事件分发机制完全解析,带你从源码的角度彻底理解(上)
<div id="container"> <div id="header"> <div class=&qu ...
- Android事件分发机制:基础篇:最全面、最易懂
如何提升安卓水平?安卓开发者必须了解的事件分发机制. 最全面.最易懂的形式来讲解Android事件分发机制. 0. 前言 鉴于安卓分发机制较为复杂,故分为多个层次进行讲解,分别为基础篇.实践篇与高级篇 ...
- 一篇文章彻底搞懂Android事件分发机制
本文讲的是一篇文章彻底搞懂Android事件分发机制,在android开发中会经常遇到滑动冲突(比如ScrollView或是SliddingMenu与ListView的嵌套)的问题,需要我们深入的了解 ...
- Android 事件分发机制分析及源码详解
Android 事件分发机制分析及源码详解 文章目录 Android 事件分发机制分析及源码详解 事件的定义 事件分发序列模型 分发序列 分发模型 事件分发对象及相关方法 源码分析 事件分发总结 一般 ...
- 《Android深入透析》之Android事件分发机制
<Android深入透析>之Android事件分发机制 <Android深入透析>之Android事件分发机制 一. Android分发机制概述: Android如此 ...
- View的事件体系之三 android事件分发机制详解(下)
接着上一篇来分析事件分发机制,在看了各位大牛的关于事件分发机制的分析后茅塞顿开,之前看过好几遍郭霖,弘扬以及玉刚大神关于事件体系的讲解,一直看不懂,比较模糊,最近复习时,看到一篇博文,写的相当精彩,看 ...
最新文章
- 春天来了,苹果M2芯片3月面世!全线换新,单核性能远超M1 Max
- ant+svn+tomcat实现项目自动部署
- Tensorflow Lite 编译
- 使用docker快速启动jetlinks
- Quartz以及代码实现--可以实现定时器效果
- Erlang与Java内存架构
- Java两同_java:一个类实现的两个接口里都有同一个方法(名),怎么处理?
- java 生产者消费者代码_Java生产者和消费者代码
- CentOs7.3 搭建 Solr单机服务
- plSQL中修改代码字体的大小
- 用php表示掷骰子两次比大小,php实现的中秋博饼游戏之掷骰子并输出结果功能详解...
- 排列和组合 Permutation and Combination
- 计算机安装win10系统还原,解决win10电脑一键还原教程
- 饼图的属性和南丁格尔双图并列显示
- uni-app小程序生成海报,支持各种机型
- Matlab-RBF网络(径向基函数网络)-rbepnngrnn
- 维度表和事实表的含义
- 如何配置高性能的计算机,笔记本电脑如何设置电源计划为高性能
- android lottie字体json,从json文件到炫酷动画-Lottie实现思路和源码分析
- 电磁波与不同类型的光