直接继承CompoundButton接收不到ACTION_UP的原因
前提:由于部门调整,所以我的工作职责变成 搭建一个动态特效组件库来供项目部门使用,任务比较庞大。hoho,慢慢来。
任务一:一个带动态特效的Switch。
任务分解:由于需求特效不能直接继承Switch来做,只能将代码写入到Switch源码中,为了以后调试方便及方便其他人员调试,所以需要将Switch放到eclipse中编译通过,那么,开始吧。
遇到问题:1. import android.text.method.AllCapsTransformationMethod; 报错
2. com.android.internal.R 找不到
解决方法:1. 导入framework.jar可以解决
2. 导入layoutlib可以解决报错,但是使用这种方法以后Switch构造函数中TypedArray 、appearance通通为空,获取不到,所以也是失败,想了一些方法也没办法获取得到,因为考虑到工期问题,所以决定将Switch中的图片资源放到Drawable下面,直接获取资源来忽略此问题。等Switch完成以后再来解决这个问题
好了。到了这里,所有已知的问题都解决了。调试过程中发现
public boolean onTouchEvent(MotionEvent ev)
只能接收到ACTION_DOWN事件,不能接收其他事件。想想很奇怪啊。系统的switch组件都可以,为什么我的不可以。唯一的区别就是style啊。看看style代码没有和touch相关的东西啊。。奇怪。。找不到区别,那就只能跟代码了。连上手机,打个断点,找啊找啊。找了两个小时多。找到问题了。。
在viewgroup中
public boolean dispatchTouchEvent(MotionEvent ev) {
if (dispatchTransformedTouchEvent(ev, false, child, idBitsToAssign))
{
mLastTouchDownTime = ev.getDownTime();
mLastTouchDownIndex = childIndex;mLastTouchDownX = ev.getX();
mLastTouchDownY = ev.getY();
newTouchTarget = addTouchTarget(child, idBitsToAssign);
alreadyDispatchedToNewTouchTarget = true;break;
}
}
这个if条件走不进来,导致 mFirstTouchTarget 值一直为空,所以目标无效,继续跟进去这个if条件发现
在view中
public boolean onTouchEvent(MotionEvent event)
if (((viewFlags & CLICKABLE) == CLICKABLE ||(viewFlags & LONG_CLICKABLE) == LONG_CLICKABLE))
这个if条件不满足,返回为false,哦。原来是clickable这个属性值为false。终于找到问题了。但是新的问题是switch为什么可以呢。查找switch的代码没有找到clickable相关了。翻翻CompoundButton。原来在CompoundButton中定义了
<style name="Widget.CompoundButton">
<item name="android:focusable">true</item>
<item name="android:clickable">true</item>
<item name="android:textAppearance">?android:attr/textAppearance</item>
<item name="android:textColor">?android:attr/textColorPrimaryDisableOnly</item>
<item name="android:gravity">center_vertical|start</item>
所以默认就有clickable。问题又出来了。为什么直接继承不行呢?查找如下:
AndroidManifest.xml 中application中默认使用主题
android:theme="@style/AppTheme"
在style.xml中。
<style name="AppTheme" parent="AppBaseTheme">
继续查找下去。真相了:
系统默认的theme.xml中
只定义了如下四种
<item name="checkboxStyle">@android:style/Widget.CompoundButton.CheckBox</item>
<item name="radioButtonStyle">@android:style/Widget.CompoundButton.RadioButton</item>
<item name="starStyle">@android:style/Widget.CompoundButton.Star</item>
<item name="switchStyle">@android:style/Widget.Holo.CompoundButton.Switch</item>
独独没有定义CompoundBotton,所以应用不到CompoundBotton的风格。看来是google是没有考虑到有人会直接继承CompoundButton吗?
绕来绕去。完美解决问题2才是正道啊。。
如有错误,请指正。
直接继承CompoundButton接收不到ACTION_UP的原因相关推荐
- Android 中View仅仅能接收到ACTION_DOWN无法接收ACTION_MOVE和ACTION_UP解决的方法
Android 中View仅仅能接收到ACTION_DOWN无法接收ACTION_MOVE和ACTION_UP解决的方法 参考文章: (1)Android 中View仅仅能接收到ACTION_DOWN ...
- Java 技术篇 - 前端浏览器发送一次url请求后端ServerSocket接收到两次请求原因及解决方法,GET /favicon.ico HTTP/1.1问题处理
效果图如下: 前端发送一次请求,后端接收到两次,第二次是:GET /favicon.ico HTTP/1.1 可以看到页签上标题栏前面是个地球,这个是默认的. 原因就是后台给的响应里没有指定这个图标, ...
- Linux下串口编程遇 接收数据错误问题及原因
近日在调试串口的时候发现,另一设备向我ARM板的串口发送0x0d,我接收之后变成了0x0a,这是问题一:另外当对方向我发送一串数据,如果其中有0x11,那么我总是漏收此数,这是问题二. 由于问题莫名其 ...
- Android 接收不到广播的原因解决
1.高版本,用户发送自定义广播,接收不到信息 Intent intent = new Intent(); intent.setAction("demo.destroy"); int ...
- linux下netty接收不到服务,Netty 发送消息失败或者接收消息失败的可能原因
Conditional Split component 用法 Conditional Split 用于将数据流按照条件进行拆分,每一个output 都有name和condition. 数据流逐行按照c ...
- Qt中使用多线程的一些心得(一)——继承QThread的多线程使用方法
一 前言 二Qt多线程方法一 继承QThread 2.1使用多线程的原因分析 2.2 写一个继承于QThread的线程 三 总结 一 前言 本篇文章部分内容参考了该博文:传送门. Qt中有两种 ...
- js面向对象的程序设计 --- 下篇 继承启蒙
继承是oo语言中一个最为人津津乐道的概念.ECMAScript支持实现继承,而且实现继承只要是靠原型链来实现的 ·原型链 其基本思想是利用原型让一个引用类型继承另一个引用类型的属性和方法. 简单回顾一 ...
- JavaScript原型链实现继承
js 继承 原型链 默认的原型 确定原型和实例的关系 谨慎定义方法 原型链的问题 借用构造函数 组合继承 最常用的继承模式 原型式继承 寄生式继承 寄生组合式继承 是引用类型最理想的继承范式 学习记录 ...
- 测试使用2mH的工字型电感在接收150kHz导航信号中性能
简 介: 在 测试基于2SK241的150kHz的高频放大器 及其相关的博文讨论了使用自行绕制工字型电感接收在 全国大学省智能车竞赛 中节能信标组中的150kHz导航信号.下面讨论一下是否可以使用手边 ...
最新文章
- php网站开发案例教程ppt,php网站开发案例教程》课件.ppt
- windows安装anaconda_[计算机科学工具系列] Anaconda和conda
- 分享Silverlight/WPF/Windows Phone一周学习导读(4月4日-4月9日)
- 数据结构之树与二叉树的应用:哈夫曼树(最优二叉树)
- EfficientPS:目前排名第一的高效高精度全景分割算法
- EasyUI的DataGrid 分页栏英文改中文解决方案
- 【产品体验】echo回声
- Mac 使用Quik Time Player为iPhone录屏后, iPhone状态条时间变为9:41
- 【月径流预测】基于matlab未来搜索算法算法优化BP神经网络月径流预测【含Matlab源码 2001期】
- ××× L2TP over IPSec 配置
- 好用的Redis客户端操作工具
- java-遍历Json
- GitLab 如何删除 Forked from
- 短网址还原的Bookmarklet
- 手机端微信突然弹出电脑端已登录,是什么原因?
- 三姬分金/四姬分金/五姬分金(海盗分金币)等经典博弈论问题
- 怎样实现将分数进行相加的操作?
- Tiny6410之重定位代码到SRAM+4096
- 天边一朵云-最终章动画化决定,看云卷云舒
- 阿里云NLP接口调用