2013-05-16 12 views
7

Non trovo il modo di farlo funzionare.fare una visualizzazione in primo piano click-through

La mia applicazione ha 2 FrameLayout con molte viste figlio (supponiamo ImageViews per semplicità), impilati uno sull'altro.

Il mio problema è che ho bisogno del FrameLayout su TOP e di TUTTI I SUOI ​​BAMBINI per far passare i tocchi attraverso di essi, raggiungendo il FrameLayout sottostante (ei suoi figli). Qualcosa come eventi puntatore: nessuno in HTML applicato a tutte le immagini dei framelayout TOP.

Ho provato setClickable (false) e setEnabled (false) sia su FrameLayout sia sui suoi figli, ma se faccio clic su un figlio disabilitato (ad esempio un ImageView), il tocco non raggiungerà un ImageView sottostante (ovvero child of the bottom FrameLayout)

Il seguente codice è il mio miglior tentativo di disabilitare FrameLayout ei relativi figli (mSlideLayout è il frame principale padre, il livello è rappresentato da ciascun figlio vista immagine). Mi sto perdendo qualcosa??

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

risposta

7

Sì, obviouly mi mancava onInterceptTouchEvent, ignorando questo nel framelayout e restituendo vero rende quanto sopra ridondante di routine:

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