当前布局

通过点击左边下边按钮控制右边布局拦截事件改变右边按钮2能否收到点击事件

右边最外层是一个自定义线性布局,继承自系统的Linearlayout


class CustomLinearLayout @JvmOverloads constructor(
    context: Context,
    attrs: AttributeSet? = null,
    defStyleAttr: Int = 0
) : LinearLayout(context, attrs, defStyleAttr) {
    /**
     * 设置是否消费触摸事件
     * @param consume true 表示消费触摸事件,返回 true;false 表示不消费,调用父类方法
     */

    fun changeConsumeTouchEvent() {
        Log.d(TAG, "changeConsumeTouchEvent: 改变前:$isConsumeTouchEvent")
        isConsumeTouchEvent = !isConsumeTouchEvent
        Log.d(TAG, "changeConsumeTouchEvent: 改变前:$isConsumeTouchEvent")
    }

    override fun dispatchTouchEvent(ev: MotionEvent?): Boolean {
        return if (isConsumeTouchEvent) {
            // 如果标志位为 true,直接返回 true,消费触摸事件
            true
        } else {
            // 否则调用父类的 dispatchTouchEvent 方法
            super.dispatchTouchEvent(ev)
        }
    }

    companion object{
        var TAG = "CustomLinearLayout"
        var isConsumeTouchEvent = false
    }

}

点击左边按钮2触发点击事件如下:

change2为左边按钮2,linear为右侧线性布局
 change2.setOnClickListener {
            linear.changeConsumeTouchEvent()
        }

改变线性布局是否拦截事件

效果:

改变前点击右侧布局按钮能收到点击事件触发点击效果

点击左侧改变状态按钮后,再次点击按钮2没反应,实现了点击事件的拦截|

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐