9

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

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

我的问题是,我需要 TOP 上的 FrameLayout 及其所有子项让触摸通过它们,到达底层 FrameLayout(及其子项)。类似于指针事件:HTML 中的无应用于 TOP 框架布局的所有图像视图。

我已经在 FrameLayout 及其子级上尝试了 setClickable(false) 和 setEnabled(false),但是如果我单击禁用的子级(例如 ImageView),触摸将不会到达底层 ImageView(即底部的子级)框架布局)

以下代码是我禁用 FrameLayout 及其子项的最佳尝试(mSlideLayout 是父 FrameLayout,layer 是每个 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);
    }
} 
4

1 回答 1

7

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

    FrameLayout slideLayout=new FrameLayout(getActivity()){
        @Override
        public boolean onInterceptTouchEvent(MotionEvent ev) {
            if (mIsMuteTouches) return true;
            return super.onInterceptTouchEvent(ev);
        }
    };
于 2013-05-16T13:01:15.280 回答