2012-05-31 15 views
7

W moim projekcie użyłem onTouchEvent do wykrycia dotyku na ekranie i wykonania odpowiednich czynności, i użyłem viewPager do działania machnięcia. Problem polega na tym, że akcje dotykowe są wykonywane. Znajdź rozwiązanie od here. Ale moim nowym Problemem jest to, że dotyk staje się nieaktywny po tym, jak TouchEvent.Action_up zostanie wykonany. Kod jest następujący:onTouchEvent jest wykonywany, gdy strona jest przeciągana za pomocą ViewPager i 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; 
    } 
}); 

W powyższym kodzie, jeśli wrócę fałszywe Action_up nie jest uzyskiwanie wykonywane .. Jeśli wrócę prawda Action_cancel nie jest coraz executed..that jest wprost wartością jest problem tam.

Odpowiedz

2

Zmieniam coś na ten.

nie używać awesomePager.requestDisallowInterceptTouchEvent(false), wystarczy użyć return true.

aktywności zdefiniować sroll logiczną;

ustawione sroll = positionOffset! = 0,0 w ViewPager.onPageScrolled i zastąpić onTouchEvent w którym widok w ViewPager.

teraz można sprawdzić if (event.getAction() == MotionEvent.ACTION_UP & &! Sroll) zdecydować, czy będzie zdarzenie wywołane

1

miałem ten sam problem! Dla mnie to bardzo dobrze ....

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.... 
       . 

} 

przywrócić cały onTouch methode jako prawdziwe, a nie fałszywy ...

return true;