最近看源码看见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的事件