2012-03-05 7 views
6

Sto usando il cercapersone per scorrere tra le visualizzazioni in Android. Ora devo catturare l'evento di tocco per ciascuna vista. quando sostituisco l'ascoltatore touch per catturare l'evento tap, l'azione di scorrimento non avviene e lo schermo rimane nella prima pagina stessa. Come aggiungo l'ascoltatore touch per visualizzare il pager?Come abilitare il listener del tap in view page in Android?

Codice:

viewPager.setOnTouchListener(new OnTouchListener(){ 

      @Override 
      public boolean onTouch(View v, MotionEvent event) 
      { 

        mDetector.onTouchEvent(event); 
        return true; 



      }}); 

Per il codice di cui sopra sono in grado di catturare eventi rubinetto, ma l'azione colpo diventa impossibile.

risposta

2

Nancy, non è necessario sovrascrivere manualmente i swip della pagina o gli eventi di tocco. Basta aggiungere le pagine al ViewPager e ViewPager si prenderà automaticamente cura dello scorrimento.

Tuttavia, è necessario collegare i listener di tocco all'oggetto in ciascuna pagina. Quindi, se la pagina 1 ha un layout lineare con molti pulsanti e devi scoprire quando questi pulsanti sono stati cliccati, devi collegare OnClickListeners per ciascuno di questi pulsanti.

Fammi sapere il tuo caso d'uso in modo che possiamo capire meglio, perché è necessario scoprire quando una pagina è stata cliccata!

+0

ho bisogno di mostrare una finestra di avviso quando lo schermo viene toccato in vista pager . Come posso catturare l'evento Tap in questo caso. il mio schermo è un layout lineare con una vista elenco in esso. – Nancy

+0

È possibile 1. ascoltare i clic sul linearlayout (che contiene il ListView) impostando l'attributo LinearLayout android: clickable = true e quindi usin ClickListener su di esso o 2. ascolta un onItemClick su un oggetto ListView, in modo che quando il viene cliccato l'elemento può andare a onItemClickListener http://goo.gl/iEcij – Soham

4

Possiamo usare gesti (Link1, Link2):

public boolean onTouchEvent (MotionEvent ev) 

Spero che questo aiuti!

23

Qui vi lascio un frammento del mio codice per rilevare un "click" sul OnTouchListener, spero che aiuta

mImagePager.setOnTouchListener(new OnTouchListener() { 
     private float pointX; 
     private float pointY; 
     private int tolerance = 50; 
     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      switch(event.getAction()){ 
      case MotionEvent.ACTION_MOVE: 
       return false; //This is important, if you return TRUE the action of swipe will not take place. 
      case MotionEvent.ACTION_DOWN: 
       pointX = event.getX(); 
       pointY = event.getY(); 
       break; 
      case MotionEvent.ACTION_UP: 
       boolean sameX = pointX + tolerance > event.getX() && pointX - tolerance < event.getX(); 
       boolean sameY = pointY + tolerance > event.getY() && pointY - tolerance < event.getY(); 
       if(sameX && sameY){ 
        //The user "clicked" certain point in the screen or just returned to the same position an raised the finger 
       } 
      } 
      return false; 
     } 
    }); 
+0

funziona come fascino. –

+0

grazie, e forse se vuoi o hai bisogno puoi aggiungere un timer e se ci vuole più di un secondo prima che rilasci il tocco o qualcosa del genere allora puoi decidere di non sparare il tocco. –

+0

molto buona risposta. Mi ha aiutato molto ... grazie mille – asiya

0

solo per aggiungere alla grande risposta di Jorge, si può solo utilizzare la distanza invece di SAMEX e lo stesso, che è un po 'più elegante. Esempio:

// Ignore events that are swipes rather then touches 
float distX = event.getX() - pointX; 
float distY = event.getY() - pointX; 
double dist = Math.sqrt(distX * distX + distY * distY); 
if (dist > tolerance) { 
    return false; 
} 
0

Mettere l'evento click sulla vista oggetto del viewpager all'interno del viewPagerAdapter nel metodo instantiateItem come -

 @Override 
     public Object instantiateItem(ViewGroup container, final int position) { 

      // Declare Variables 
      ImageView jive_image; 

      inflater = (LayoutInflater) context 
        .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      View itemView = inflater.inflate(R.layout.list_item_viewpager, container, 
        false); 

      itemView.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View view) { 

        onBackPressed(); 
       } 
      }); 




      // Add viewpager_item.xml to ViewPager 
      ((ViewPager) container).addView(itemView); 

      return itemView; 
     } 
Problemi correlati