Android 设置View点击区域

最近看源码看见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)