2013-05-16 9 views
7

私はこの作業を行う方法が見つかりません。フォアグラウンドでの表示のリンク先

私のアプリケーションには、多くの子ビューを持つ2つのFrameLayoutsがあります(簡単にするためImageViewsと仮定します)。

私の問題は、タッチを通過させて下にあるFrameLayout(およびその子)に達するように、TOPおよびすべての子供にFrameLayoutが必要なことです。ポインタイベントのようなもの:TOPフレームレイアウトのすべてのイメージビューにHTMLのnoneは適用されません。

FrameLayoutとその子の両方でsetClickable(false)とsetEnabled(false)を試しましたが、無効な子(ImageViewなど)をクリックした場合、タッチは基になるImageViewには届きません下の子FrameLayout)

次のコードは、FrameLayoutとその子を無効にするための最善の試みです(mSlideLayoutは親FrameLayout、レイヤーは各画像ビューの子です)。私は何かを逃している?

/** 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); 
    } 
} 

答えて

7

はい、obviouly私はでframeLayoutでこれをオーバーライドし、trueを返し、onInterceptTouchEventがありませんでしたが、上記のルーチン冗長になります:

FrameLayout slideLayout=new FrameLayout(getActivity()){ 
     @Override 
     public boolean onInterceptTouchEvent(MotionEvent ev) { 
      if (mIsMuteTouches) return true; 
      return super.onInterceptTouchEvent(ev); 
     } 
    }; 
関連する問題