您的位置:首页 > 移动开发 > Android开发

自定义控件给子View分配点击事件

2016-04-07 14:31 381 查看

自定义控件给子View分配点击事件

自定义控件有时候需要给子控件分配点击事件,如果用注册OnClickLisenter,显的有点low,特别是子控件较多的情况.

网上没找到解决方案,爬了下ListView的源码.发现了一段.

重写onTouchEvent,获取点击的x,y;

遍历子view,判断是否有view包含这个点;

注册回调接口,点击事件传递过去.并返回ture,代表事件终止.

关键对象和代码

Rect rect = new Rect();
view.getHitRect(rect)//如方法名字意思,获取view的范围矩形
rect.contains((int) x, (int) y)//该矩形是否包含这个点


代码如下

@Override
public boolean onTouchEvent(MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
float x = event.getX();
float y = event.getY();
Rect rect = new Rect();
for (int i = 0; i < getChildCount(); i++) {
getChildAt(i).getHitRect(rect);
if (rect.contains((int) x, (int) y)) {
if (listener != null) {
listener.click(getChildAt(i), i);
getChildAt(i).performClick();
return true;
}
}
}
}

return super.onTouchEvent(event);
}

private OnItemClickListener listener;

public void setOnItemClickListener(OnItemClickListener listener) {
this.listener = listener;
}

public interface OnItemClickListener {
void click(View view, int position);
}


pompip 原创

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Android 控件