美文网首页
[Android]父View如何知道子View被点击了

[Android]父View如何知道子View被点击了

作者: 黑森林中的小木屋 | 来源:发表于2019-01-10 16:34 被阅读0次

    需求是这样的:
    封装了一个View,类似这样:

    image.png
    1处的view是添加进来的,需要在点了1里面的某个view之后,把整个view隐藏掉。
    因为1处的view是添加进来的,它里面的子view的点击事件都写在它的类里面的,外部不知道有没有被点击,也就没法隐藏整个view
    思路:利用viewOnTouchListener配合GestureDetector来通知是否被点击了
    • 如果这个viewViewGroup,遍历所有的子view,判断子view和自身是否有点击事件和是否显示
    private void setGesture(ViewGroup viewGroup){
            if(viewGroup.hasOnClickListeners() && viewGroup.getVisibility() == VISIBLE){
                viewGroup.setOnTouchListener(new OnTouchListener() {
                    @Override
                    public boolean onTouch(View v, MotionEvent event) {
                        return detector.onTouchEvent(event);//一定要返回false,否则会拦截onClick事件
                    }
                });
            }
            for(int i = 0;i<viewGroup.getChildCount();i++){
                View view = viewGroup.getChildAt(i);
                if(view instanceof ViewGroup){
                    setGesture((ViewGroup) view);
                    continue;
                }
                if(view.hasOnClickListeners() && view.getVisibility() == VISIBLE){
                    view.setOnTouchListener(new OnTouchListener() {
                        @Override
                        public boolean onTouch(View v, MotionEvent event) {
                            return detector.onTouchEvent(event); //一定要返回false,否则会拦截onClick事件
                        }
                    });
                }
            }
        }
    
    • 如果是view就跳过遍历子view这一步

    配合GestureDetector:

    detector = new GestureDetector(getContext(), new GestureDetector.SimpleOnGestureListener(){
                @Override
                public boolean onSingleTapConfirmed(MotionEvent e) { //单击
                    if(onViewClick!= null){
                        onViewClick.onClick(null);
                    }
                    return super.onSingleTapConfirmed(e);
                }
            });
    

    相关文章

      网友评论

          本文标题:[Android]父View如何知道子View被点击了

          本文链接:https://www.haomeiwen.com/subject/piuarqtx.html