最近,QA提了一个Bug,RadioButton点击好几次还选不中,经过查看代码没问题,仔细分析了一下,原来是图片比较小。为了不麻烦设计妹子,就想能不能用程序员的方式解决。
最后想到了两种解决方案:一种是在RadioButton下面添加一个Button,并让焦点聚焦在Button上面,把点击事件放在Button上。
另一种是:用系统提供的 TouchDelegate 类,来扩大点击区域(建议使用此种方法,可以写个工具类,以后直接拿来用,也就是一次封装,处处使用)。
下面介绍一下TouchDelegate类,TouchDelegate类比较简单,总共一百多行代码,两个方法,一个是类构造方法,一个是onTouchEvent方法。首先来看一下这个类的介绍:
这句话的意思是:通过此类可以扩大一个view的触摸范围。
TouchDelegate类的构造方法,需要传入两个参数,bounds是扩大后的矩形区域,delegateView是需要扩大点击区域的view。mSlop是触发移动事件的最短距离,如果小于这个距离就不触发移动控件。
onTouchEvent的调用世纪是在View的onTouchEvent方法里,如下图,
原理就是,如果手指落下的坐标点在扩大的rect区域内,如下图
如果不在,直接返回false。如果在mBounds区域内,还需要判断目标view的dispatchTouchEvent方法,如下图: