2012-05-31 12 views
7

in meinem Projekt verwendet wurde. In meinem Projekt wurde onTouchEvent zum Erkennen von Berührung auf dem Bildschirm und entsprechender Aktionen verwendet, und Sie haben viewPager für die Aktion zum Durchziehen verwendet. Das Problem besteht darin, dass die Touch-Aktionen ausgeführt werden. So finden Sie die Lösung von here löste es. Aber mein neues Problem ist, dass die Berührung deaktiviert wird, sobald TouchEvent.Action_up ausgeführt wird. Code ist wie folgt:onTouchEvent wird ausgeführt, wenn die Seite mit ViewPager und 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; 
    } 
}); 

In dem obigen Code, wenn ich falsch Action_up zurückkehren wird nicht ausgeführt zu werden .. wenn ich wahr Action_cancel Rückkehr ist nicht immer executed..that wird Pass von Wert ist das Problem dort.

Antwort

2

ich ändere etwas dafür.

nicht verwenden awesomePager.requestDisallowInterceptTouchEvent(false), verwenden Sie einfach return true.

in der Aktivität definieren Sie eine boolean sroll;

gesetzt sroll = positionOffset! = 0,0 in ViewPager.onPageScrolled und i außer Kraft setzen onTouchEvent, in dem die Ansicht im ViewPager.

jetzt können Sie überprüfen, ob (event.getAction() == MotionEvent.ACTION_UP & &! Sroll) das Ereignis zu entscheiden, ob Willen

ausgelöst
1

ich hatte das gleiche Problem! Für mich war das sehr gut ....

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

} 

zurückkehren Ihre ganze OnTouch Methode als wahr und nicht falsch ...

return true; 
Verwandte Themen