最近在做一个相当奇葩的需求:扩大控件的触控区域,不改变控件大小。
从一个大牛同事那学了一个方法,可惜只能用于父控件内只有一个子控件需要扩大触控区域的情况。
一下是大体的代码:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
view = this.findViewById(R.id.texting);
ViewTreeObserver vto = view.getViewTreeObserver();
vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener(){
@Override
public void onGlobalLayout() {
//Create a new Rect
Rect bounds = new Rect();
//get hit rect from view
view.getHitRect(bounds);
//reset left,right,top,bottom
bounds.left +=10;
bounds.right +=10;
bounds.top +=10;
bounds.bottom += 10;
//create a TouchDeleget and set to the parent of this view.
View parent = (View)view.getParent();
TouchDelegate touchDelegate = new TouchDelegate(bounds,view);
parent.setTouchDelegate(touchDelegate);
}});
}
同一层视图上如果有多个控件需要扩大触控区域的情况,暂时还没有完美的解决方案。
大体的思路如下:
在父控件的 diepatchTouchEvent方法上对触控点进行判断,如果符合某个子控件的就由那个子控件进行响应。
这个方案下,我的每一次点击都成了长按事件。不完美。