android 触摸监听重写_自定义View中重写onTouchEvent后设置点击监听onClick()方法无效冲突解决...-程序员宅基地

技术标签: android 触摸监听重写  

想来也好久没到简书发东西了,其实一直在写着些有的没的,倒有想着年底把它们都发出来.今天之所以写下这篇是觉得有必要记录一下这种奇奇怪怪的问题,花费了我大半时间不说还没半点技术性质可言...好了废话不多说

场景重现:

因项目需要,开发者x某在充分了解了原型图后自定义了符合功能要求的自定义view(继承view而非ViewGroup),按着各个重写方法定制界面,事件处理(onTouchEvent())后测试功能通过,后产品加需求需要在当前功能不变下添加点击监听,遂setOnClickListener()方法,测试发现onClick方法不执行.

故障代码:

@Override

public boolean onTouchEvent(MotionEvent event) {

switch (event.getAction()) {

case MotionEvent.ACTION_DWON:

//业务代码

return true/false;

break;

case MotionEvent.ACTION_UP:

//业务代码

return true/false;

break;

...

}

return super.onTouchEvent(event);

}

故障分析:

通过上面描述不难发现,onClick()方法肯定跟触摸监听onTouchEvent()方法起"冲突"了,这个冲突是怎么产生的呢?

我们不妨先来了解下在android源码中onCLick()方法的执行前提,以下是View类的onTouchEvent方法:

public boolean onTouchEvent(MotionEvent event) {

...

case MotionEvent.ACTION_UP:

if (!focusTaken) {

performClick(); //onClick方法将会在该方法中调用

}

}

...

}

说白了就是得有消费up事件,看到这里x某回想了自己编写过的代码,在up分支里是有返回true的啊?查阅了一番文档问题得不到解决的x某心烦意乱,慌乱中瞥见了自己重写的onTouchEvent方法有一项warning:

Custom view xxx(自定义view类名) overrides onTouchEvent but not performClick

心烦意乱的x某化身可达鸭

言下之意就是自定义的view重写了onTouchEvent方法后却没有调用performClick()方法,而这个方法恰好是onClick的入口方法...

翻译到这里,x某再次修改了代码:

@Override

public boolean performClick() {

return super.performClick();

)

@Override

public boolean onTouchEvent(MotionEvent event) {

switch (event.getAction()) {

case MotionEvent.ACTION_DWON:

//业务代码

return true/false;

break;

case MotionEvent.ACTION_UP:

//业务代码

performClick();

return true/false;

break;

...

}

return super.onTouchEvent(event);

}

测试onClick执行,又可以跟产品愉快的玩耍la~~~

结论

自定义的view重写了onTouchEvent方法后,还想要响应onClick方法的话,最好在up事件里调用一下performClick()方法...

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_39784263/article/details/111983550

智能推荐

AIX登录账号被锁_aix查看用户锁定情况-程序员宅基地

文章浏览阅读2k次。限制密码重试次数,超过限制次数后锁定用户本文PDF版下载http://xunzhaoxz.itpub.net/resource/40016/29789作者:xunzhao【转载时请以超链接形式标明文章出处和作者信息】链接:http://xunzhaoxz.itpub.net/post/40016/488626加强系统安全,其中一大要务就是保护好系_aix查看用户锁定情况

BUUCTF Reverse/[MRCTF2020]hello_world_go_buuctfhello worldgo-程序员宅基地

文章浏览阅读512次。BUUCTF Reverse/[MRCTF2020]hello_world_go先看文件信息,没有加壳看到题目有go,推测这是go语言编写的程序下载好IDAGolangHelper,然后按alt + f7 选择 go_entry.py上面两个是查看go语言信息的检测到可能是这几个版本选择一个版本,然后点击剩下的三个按钮,然后点OK,但是我的IDA(7.5版本)加载失败了,然后找了好久的解决方法还是搞不定然后直接搜索字符串flag跟进这里按a_buuctfhello worldgo

jvm-sandbox-repeater在docker上的部署_jvm sandbox docker-程序员宅基地

文章浏览阅读649次。repeater在单机上部署,很简单。但是在docker上部署,则有些问题。这里记录下部署过程:制作安装包如果对repeater代码有修改,则使用代码工程里的install-lcoal.sh脚本来生成安装包。如果没修改,本地有代码工程的情况下,也可以使用install-local.sh脚本安装,否则,使用install-repeater.sh来在线安装。安装完成后,用户目录下会生成sandbox和.sandbox-module两个文件夹,将两个文件夹打包成zip包,repeater的安装包就做好了。_jvm sandbox docker

java--竖线分隔符|_竖分隔符-程序员宅基地

文章浏览阅读2.2w次。在数据中使用"|"分隔符,在解析的时候,使用split("|"),得到的结果和预期不一致,是因为|在正则表达式中有含义,需要使用转义符来表示比如数据是 str= "red|yellow|black";String[] str_sp = str.split("\\|")_竖分隔符

【转】【C#】ZIP、RAR 压缩与解压缩-程序员宅基地

文章浏览阅读12次。压缩文件夹源码如下using System;using System.Data;using System.Configuration;using System.Web;using System.Web.Security;using System.Web.UI;using System.IO;using ICSharpCode.SharpZipLib.Checksums...

408计算机组成思维导图(各章节清晰详细可下载导图文件)_王道408思维导图-程序员宅基地

文章浏览阅读1.9w次,点赞90次,收藏268次。以下思维导图是我在考研期间制作的,有部分参考王道章节的思维导图,如有错误地方望指正。有些公式符号可能不太能看懂,这个最好需要大家自己翻书写一写!转发本文望告知!如想要获取xmind文件的同学可以关注我的个人公众号“小柒很爱喵”,回复“计组导图”,可获得以上导图原图和xmind文件(可修改导图内容、查看导图隐藏的笔记与备注,即上图带杠杠的地方是我进一步助于理解的解释..._王道408思维导图

随便推点

第四届“蓝帽杯”全国大学生网络安全 技能大赛 Writeup_highlight_file(__file__); include("./check.php");-程序员宅基地

文章浏览阅读5.4k次,点赞9次,收藏13次。第四届“蓝帽杯”全国大学生网络安全 技能大赛 WriteupMisc签到sudo熟悉的解密Web文件包含绕过easiestSQLiSoitgoesInclusionCryptozucMisc签到观色010editor查看,发现文件头是GIF89a,是gif文件Stegsolve 调色道,出现前半flagps打开,分离两个图层Stegsolve分析,得到后半flag,即可得到完整flagsudo喜欢玩数独吗,一起来玩吧。nc 47.93.204.245 120001-9数字玩99_highlight_file(__file__); include("./check.php");

c语言生日快乐爱心,C语言 生日快乐-程序员宅基地

文章浏览阅读2k次,点赞3次,收藏10次。#include #include #include #define I 20#define R 340int main(){system("mode con cols=80 lines=60 ");system("title 向你致以最诚挚的祝福!");char data[200][60]={{"祝你生日快乐!祝你生日快乐 !"},{"Happy birthday to you!"},{"Ha..._用char data[60]

RaSa2.5.x之一:Rasa Playground_rasa 2.5.x demo-程序员宅基地

文章浏览阅读251次。目录一、构建自己的对话助手(简单示例)1. NLU数据(NLU data)2. 响应(Responses)3. 故事(Stories)4. 表单(Forms)5. 规则(Rules)安装(Installation)快速安装(Quick Installation)从源码安装(Building from Source)附加依赖项(Additional Dependencies)Dependencies for spaCyDependencies for MITIE调整自己的NLU模型(Tuning Your N_rasa 2.5.x demo

心形线面积公式推导_五个步骤制作出让人秒懂的“梯形面积公式推导”动图——GeoGebra制作教程...-程序员宅基地

文章浏览阅读1.2k次。前言:在网络上,容易搜索到梯形面积公式推导的过程。但是,简洁明了、可下载的却少之又少。那么,不如自己动手制作吧!梯形面积公式推导的方法有多种,本文选取割补法——将梯形转化为三角形的方法。先看适合初学者的动态演示效果(用汉字书写,并特意显示三角形、梯形的字眼):以直角梯形为例,进行演示再看简洁的动态演示效果(用字母书写):以等腰梯形、一般梯形为例,进行演示上图中,只要拉动相应的滑动条,就可以改变梯形..._心形线证明等腰梯形

python实践:让所有奇数都在偶数前面,而且奇数升序排列,偶数降序排序_python序列调序要求调整元素顺序,把所有奇数都放到前面,偶数都放到后面-程序员宅基地

文章浏览阅读3.6k次。"""给定一个任意长度数组,实现一个函数让所有奇数都在偶数前面,而且奇数升序排列,偶数降序排序,如字符串'1982376455',变成'1355798642'"""class Solution(): def SortNum(self,num_list): """ :param num_list: 传入数组 :return: rlis..._python序列调序要求调整元素顺序,把所有奇数都放到前面,偶数都放到后面

python --模块-程序员宅基地

文章浏览阅读118次。python模块Python 模块(Module):是一个 Python 文件,以 .py 结尾,包含了 Python 对象定义和Python语句模块的作用:模块能够有逻辑地组织Python 代码段 模块能定义函数,类和变量,模块里也能包含可执行的代码import语句模块的引入模块定义好后,我们可以使用import 语句来引入模块,语法如下:import ...

推荐文章

热门文章

相关标签