Android中父View穿透子View响应长按事件

需求

在实际项目开发中,有这样的需求,长按整个ViewGroup响应长按事件,例如长按弹出对话框或者popwindow等等

问题

针对这个需求出现两种情况:
1,当ViewGroup中无任何子view的时候,长按事件按压ViewGroup任何位置都可以响应.
2,当ViewGroup中有子view的时候,例如包含TextView,长按子view的时候,就无法响应ViewGroup的长按事件,长按子view以外的区域可以影响其长按事件.
显然这样是不符合我们的需求,那么如何解决此问题呢?

解决方案

1,给子view也添加长按事件,调用父view的长按逻辑
特点:这种方式可以实现,但是子view较多的情况下,需要添加较多长按事件,会增加代码复杂度
2,给子view设置触摸监听,在回调方法抬起的时候,响应view的长按事件
特点:需要处理多个子view的触摸监听.
代码示意:

tvContent.setOnTouchListener(new View.OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        if (event.getAction() == MotionEvent.ACTION_UP) {
            getViewGroup().performLongClick();
        }
        return false;
    }
});

3,父view拦截长按事件,不让他传递给子view.
4,更好的方案有待思考和研究,欢迎提供宝贵意见!!!

你可能感兴趣的:(Android中父View穿透子View响应长按事件)