制作前景视图点击

时间:2013-05-16 12:47:39

标签: android views touches click-through

我找不到让这项工作的方法。

我的应用程序有2个FrameLayouts,有很多子视图(为简单起见,假设是ImageViews),一个堆叠在另一个上面。

我的问题是,我需要TOP及其所有孩子的FrameLayout让触摸通过它们,到达底层的FrameLayout(和它的子节点)。像指针事件:HTML中没有应用于TOP framelayout的所有图像视图。

我已经在FrameLayout及其子节点上尝试了setClickable(false)和setEnabled(false),但是如果我单击一个禁用的子节点(例如ImageView),触摸将无法到达底层的ImageView(即子节点)底部FrameLayout)

以下代码是我禁用FrameLayout及其子代的最佳尝试(mSlideLayout是父FrameLayout,图层是每个imageview子项)。我错过了什么吗?

/** Create the layers structure into the layout */
void create_layers() {
    Context context=getActivity();
    mSlideLayout.removeAllViews();
    for (FunqLayer layer:mLayers) {
        if (layer!=null) {
            View v=layer.init_internal(context, mSlideLayout); // constructs the child layer, suppose it's an ImageView
            if ((v!=null) && (mIsMuteTouches)) {
                v.setEnabled(false);
                v.setClickable(false);
                // this should obviously let touches pass through but it doesnt :(
            }
        }
    }
    if (mIsMuteTouches) {
        // also do the same in the FrameLayout itself with no luck :(
        mSlideLayout.setEnabled(false);
        mSlideLayout.setClickable(false);
    }
} 

1 个答案:

答案 0 :(得分:7)

是的,显然我错过了onInterceptTouchEvent,在framelayout中覆盖它并返回true会使上述例程变得多余:

    FrameLayout slideLayout=new FrameLayout(getActivity()){
        @Override
        public boolean onInterceptTouchEvent(MotionEvent ev) {
            if (mIsMuteTouches) return true;
            return super.onInterceptTouchEvent(ev);
        }
    };