最近看源码看见onTouchEvent 方法中 有这么一段话
if (mTouchDelegate != null) {
if (mTouchDelegate.onTouchEvent(event)) {
return true;
}
}
也就是说 设置该代理后会直接消费事件 最后写代码测试了下 发现该代理 会增加事件处理的区域
lin = (LinearLayout) findViewById(R.id.lin);
tv = (TextView) findViewById(R.id.tv);
btn = (Button) findViewById(R.id.btn);
tv.setBackgroundColor(Color.RED);
lin.setTouchDelegate(new TouchDelegate(new Rect(0,0,500,500),tv));
tv.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.d("tg","view onclick");
}
});
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.d("tg","btn onclick");
}
});
lin.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.d("tg","lin onclick");
}
});
验证后发现 确实会增加事件处理区域 但是在增加的事件区域消费事件后 父容器将无法接收到事件 但不会影响到其他view的事件
本文探讨了在Android中通过设置事件代理来扩大View点击区域的现象。通过对onTouchEvent方法的源码分析,作者发现这样做不仅会增加事件处理区域,而且在新增区域消费事件后,父容器将无法接收到事件,但不影响其他View的正常事件处理。
2620

被折叠的 条评论
为什么被折叠?



