【问题标题】:make a foreground view click-through使前景视图点击
【发布时间】:2013-05-16 12:47:39
【问题描述】:

我没有找到方法来完成这项工作。

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

我的问题是,我需要 TOP 上的 FrameLayout 及其所有子项让触摸通过它们,到达底层 FrameLayout(及其子项)。 HTML 中的 pointer-events:none 之类的东西应用于 TOP 框架布局的所有图像视图。

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

以下代码是我禁用 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);
    }
} 

【问题讨论】:

    标签: android views touches click-through


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2014-04-12
      • 2019-07-04
      • 2021-12-25
      • 1970-01-01
      • 1970-01-01
      • 2017-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多