学习的最终目标就是要学以致用,本文所分享的案例都是自己在公司实战开发过程中的真实案例,现在把它分享出来,希望对初学者有所帮助

版权声明:本文来自门心叼龙的博客,属于原创内容,转载请注明出处: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事件分发机制在实战开发中的应用之一相关推荐

  1. Android事件分发机制在实战开发中的应用之二

    学习的最终目标就是要学以致用,本文所分享的案例都是自己在公司实战开发过程中的真实案例,现在把它分享出来,希望对初学者有所帮助 版权声明:本文来自门心叼龙的博客,属于原创内容,转载请注明出处:https ...

  2. 【朝花夕拾】Android自定义View篇之(六)Android事件分发机制(中)从源码分析事件分发机制...

    前言 转载请注明,转自[https://www.cnblogs.com/andy-songwei/p/11039252.html]谢谢! 在上一篇文章[[朝花夕拾]Android自定义View篇之(五 ...

  3. 【朝花夕拾】Android自定义View篇之(六)Android事件分发机制(中)从源码分析事件分发逻辑及经常遇到的一些“诡异”现象

    前言 转载请注明,转自[https://www.cnblogs.com/andy-songwei/p/11039252.html]谢谢! 在上一篇文章[[朝花夕拾]Android自定义View篇之(五 ...

  4. Android事件分发机制完全解析,带你从源码的角度彻底理解(上)

    <div id="container">         <div id="header">     <div class=&qu ...

  5. Android事件分发机制:基础篇:最全面、最易懂

    如何提升安卓水平?安卓开发者必须了解的事件分发机制. 最全面.最易懂的形式来讲解Android事件分发机制. 0. 前言 鉴于安卓分发机制较为复杂,故分为多个层次进行讲解,分别为基础篇.实践篇与高级篇 ...

  6. 一篇文章彻底搞懂Android事件分发机制

    本文讲的是一篇文章彻底搞懂Android事件分发机制,在android开发中会经常遇到滑动冲突(比如ScrollView或是SliddingMenu与ListView的嵌套)的问题,需要我们深入的了解 ...

  7. Android 事件分发机制分析及源码详解

    Android 事件分发机制分析及源码详解 文章目录 Android 事件分发机制分析及源码详解 事件的定义 事件分发序列模型 分发序列 分发模型 事件分发对象及相关方法 源码分析 事件分发总结 一般 ...

  8. 《Android深入透析》之Android事件分发机制

    <Android深入透析>之Android事件分发机制 <Android深入透析>之Android事件分发机制 一.      Android分发机制概述: Android如此 ...

  9. View的事件体系之三 android事件分发机制详解(下)

    接着上一篇来分析事件分发机制,在看了各位大牛的关于事件分发机制的分析后茅塞顿开,之前看过好几遍郭霖,弘扬以及玉刚大神关于事件体系的讲解,一直看不懂,比较模糊,最近复习时,看到一篇博文,写的相当精彩,看 ...

最新文章

  1. 春天来了,苹果M2芯片3月面世!全线换新,单核性能远超M1 Max
  2. ant+svn+tomcat实现项目自动部署
  3. Tensorflow Lite 编译
  4. 使用docker快速启动jetlinks
  5. Quartz以及代码实现--可以实现定时器效果
  6. Erlang与Java内存架构
  7. Java两同_java:一个类实现的两个接口里都有同一个方法(名),怎么处理?
  8. java 生产者消费者代码_Java生产者和消费者代码
  9. CentOs7.3 搭建 Solr单机服务
  10. plSQL中修改代码字体的大小
  11. 用php表示掷骰子两次比大小,php实现的中秋博饼游戏之掷骰子并输出结果功能详解...
  12. 排列和组合 Permutation and Combination
  13. 计算机安装win10系统还原,解决win10电脑一键还原教程
  14. 饼图的属性和南丁格尔双图并列显示
  15. uni-app小程序生成海报,支持各种机型
  16. Matlab-RBF网络(径向基函数网络)-rbepnngrnn
  17. 维度表和事实表的含义
  18. 如何配置高性能的计算机,笔记本电脑如何设置电源计划为高性能
  19. android lottie字体json,从json文件到炫酷动画-Lottie实现思路和源码分析
  20. 电磁波与不同类型的光

热门文章

  1. 几计算机网络特,湛江理工职业学校1级MS0ffice了解计算机网络的基本概念和因特网...
  2. nvm管理node版本的使用方法和常用指令
  3. 程序员的7个被动收入途径——我如何每月赚 5万
  4. HPB Introduction
  5. FCPX插件:56种高动态HDR视频调色预设HDR Look Effects
  6. [实战Java高并发程序设计:读后感:参考文献]第一章
  7. 【洛谷题解】P1255 数楼梯
  8. 线性特征与非线性特征、线性模型与非线性模型
  9. OpenCV实现影像畸变矫正GPU
  10. 电商平台-商品表的设计