2012-05-31 6 views
7

Nel mio progetto ho usato onTouchEvent per rilevare il tocco sullo schermo e agire di conseguenza, e ho usato viewPager per azione di scorrimento. Il problema è sullo scorrimento, le azioni touch vengono eseguite. quindi trova la soluzione da here risolta. Ma il mio nuovo problema è che il touch si sta disabilitando dopo che una volta TouchEvent.Action_up viene eseguito. codice è il seguente:onTouchEvent viene eseguito quando si scorre la pagina utilizzando ViewPager e PassByValue

parent.setOnTouchListener(new OnTouchListener() { 

    public boolean onTouch(View v, MotionEvent event) { 

     switch(event.getAction()) 
     { 
     case MotionEvent.ACTION_MOVE: 
       awesomePager.requestDisallowInterceptTouchEvent(true); 
       break; 
     case MotionEvent.ACTION_UP: 
      awesomePager.requestDisallowInterceptTouchEvent(true); 
      if(flag) 
      { 
       upperdock.setClickable(false); 
       upperdock.bringToFront(); 
       tocparent.bringToFront(); 
       tocbottom.bringToFront(); 
       upperdock.setVisibility(RelativeLayout.VISIBLE); 
       tocparent.setVisibility(LinearLayout.VISIBLE); 
       tocbottom.setVisibility(LinearLayout.VISIBLE); 
       flag=false; 
      } 
      else 
      { 

       parent.bringToFront(); 
       upperdock.setVisibility(RelativeLayout.INVISIBLE); 
       tocparent.setVisibility(LinearLayout.INVISIBLE); 
       tocbottom.setVisibility(LinearLayout.INVISIBLE); 
       flag=true; 
      } 
      break; 

     case MotionEvent.ACTION_CANCEL: 
      awesomePager.requestDisallowInterceptTouchEvent(false); 
      break; 
     default: 
      break; 
     } 

     return false; 
    } 
}); 

Nel codice di cui sopra se torno falsa Action_up non è sempre eseguita .. se dovessi tornare vero Action_cancel non è sempre executed..that è passaggio per valore è il problema in là.

risposta

2

ho cambiato qualcosa per questo.

non utilizzare awesomePager.requestDisallowInterceptTouchEvent(false), basta usare return true.

nell'attività define a boolean sroll;

impostato sroll = positionOffset! = 0.0 in ViewPager.onPageScrolled e sovrascrivo onTouchEvent in cui il vista nel ViewPager.

ora è possibile controllare se (event.getAction() == MotionEvent.ACTION_UP & &! Sroll) per decidere se l'evento volontà innescato

1

Ho avuto lo stesso problema! Per me questo ha funzionato molto bene ....

case MotionEvent.ACTION_MOVE: { 
     getParent().requestDisallowInterceptTouchEvent(false); 
     break; 
    } 

case MotionEvent.ACTION_CANCEL:{ 
     getParent().requestDisallowInterceptTouchEvent(true); 
     break; 

} 

case MotionEvent.ACTION_UP:{ 

//delete awesomePager.requestDisallowInterceptTouchEvent(true); 
//you don't need it here! 
       . 
       . 
      do your stuff.... 
       . 

} 

restituire tutta la Methode onTouch come vero e non falso ...

return true;