2012-04-12 7 views
17

Sono un programmatore n00b e ho bisogno di molto aiuto.Android: scorri lo schermo per aprire un'altra attività?

Solo per scopi dimostrativi, Voglio fare semplici flora & fauna (impianto & animali) enciclopedia

Voglio fare la mia schermata iniziale trascinamento in grado, proprio come schermata iniziale di Android. Scorri verso destra per aprire la pagina Impianto e scorri verso sinistra per aprire la pagina Animali. Non so come rendere l'effetto di transizione . Quindi possiamo trascinarlo a metà strada per vedere cosa c'è nella pagina successiva e semplicemente trascinarlo indietro per cancellarlo

Potete condividere un link per creare uno schermo in grado di trascinarlo?

Grazie prima

[Edit]

@Agarwal Ho provato il codice dal tuo Link2 e non sta funzionando

provo a verificare se il gesto rilevato oppure no mettendo Toast all'interno della classe interna ma il Toast non è mostrato. Il Link1 è fondamentalmente lo stesso però.

e dagli sguardi del codice, penso che non si può fare il mio schermo di trascinamento in grado come nella schermata iniziale di Android

il mio codice:

public class Home extends Activity implements OnClickListener { 
    private GestureDetector gestureDetector; 
    View.OnTouchListener gestureListener; 
    ImageButton flora, fauna; 
    Intent go; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    initialize(); 

    gestureDetector = new GestureDetector(new SwipeGestureDetector()); 
    gestureListener = new View.OnTouchListener() { 
     public boolean onTouch(View v, MotionEvent event) { 
      return gestureDetector.onTouchEvent(event); 
     } 
    }; 
} 

private void initialize() { 
    //find view by id to image button 
    //set onClickListener to image button 
} 

public void onClick(View v) { 
    //normal switch and case for each button 

} 

private void onLeftSwipe() { 
    Toast t = Toast.makeText(Home.this, "Left swipe", Toast.LENGTH_LONG); 
    t.show(); 
    go = new Intent("test.apps.FLORA"); 
    startActivity(go); 
} 

private void onRightSwipe() { 
    Toast t = Toast.makeText(Home.this, "Right swipe", Toast.LENGTH_LONG); 
    t.show(); 
    go = new Intent("test.apps.FAUNA"); 
    startActivity(go); 
} 

private class SwipeGestureDetector extends SimpleOnGestureListener { 
    private static final int SWIPE_MIN_DISTANCE = 50; 
    private static final int SWIPE_MAX_OFF_PATH = 200; 
    private static final int SWIPE_THRESHOLD_VELOCITY = 200; 

    @Override 
    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, 
      float velocityY) { 
     try { 
      Toast t = Toast.makeText(Home.this, "Gesture detected", Toast.LENGTH_SHORT); 
      t.show(); 
      float diffAbs = Math.abs(e1.getY() - e2.getY()); 
      float diff = e1.getX() - e2.getX(); 

      if (diffAbs > SWIPE_MAX_OFF_PATH) 
       return false; 

      // Left swipe 
      if (diff > SWIPE_MIN_DISTANCE 
        && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) { 
       Home.this.onLeftSwipe(); 
      } 
      // Right swipe 
      else if (-diff > SWIPE_MIN_DISTANCE 
        && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) { 
       Home.this.onRightSwipe(); 
      } 
     } catch (Exception e) { 
      Log.e("Home", "Error on gestures"); 
     } 
     return false; 
    } 

} 
} 
+0

Ehi, domanda veloce. Hai mai capito perché link2 non funzionava? Sto cercando di farlo funzionare anche. Ma non ho questa fortuna in questo momento. – Andy

+0

Sì, ho trovato un buon codice sorgente per questo schermo trascinabile, ecco il link http://marcreichelt.blogspot.sg/2010/09/android-use-realviewswitcher-to-switch.html?m=1 – hrsetyono

+0

@DarcCode link è rotto, ecco un link alternativo [web.archive.org/web/2....](http://web.archive.org/web/20120728070120/http://marcreichelt.blogspot.sg/2010/09 /android-use-realviewswitcher-to-switch.html) – Olumide

risposta

14

Mi rendo conto che è una vecchia questione ma per chiunque altro si chieda perché il codice sopra non funziona è perché non ha impostato OnTouchListener su un oggetto View. Questo è il motivo per cui il suo "evento" di scorrimento non viene raccolto, perché nulla lo sta ascoltando.

Avrebbe potuto aggiungere questa riga per impostare colpi sul suo pulsante di immagine (anche se si sarebbe probabilmente desidera una migliore oggetto View allora questo):

flora.setOnTouchListener(gestureListener); 
+1

Grazie per aver urtato, ho trovato questo tramite google. Cercando di fare qualcosa di simile nella mia app. Più informazioni sono e meglio è. –

+0

Ho già trovato un'altra alternativa, ma questa risposta risolverebbe la mia domanda, grazie. – hrsetyono

-4

utilizzare la funzione Intento qui per andare alla prossima attività sul gesto ascoltatore

sarà b

0

Android Attività Swipe

Creare Un'attività Classe base

public abstract class _SwipeActivityClass extends AppCompatActivity 
{ 
    private static final int SWIPE_MIN_DISTANCE = 120; 
    private static final int SWIPE_MAX_OFF_PATH = 250; 
    private static final int SWIPE_THRESHOLD_VELOCITY = 200; 
    private GestureDetector gestureDetector; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     gestureDetector = new GestureDetector(this, new SwipeDetector()); 
    } 

    protected abstract void onSwipeRight(); 
    protected abstract void onSwipeLeft(); 

    public class SwipeDetector extends GestureDetector.SimpleOnGestureListener 
    { 
     @Override 
     public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) 
     { 

      // Check movement along the Y-axis. If it exceeds SWIPE_MAX_OFF_PATH, 
      // then dismiss the swipe. 
      if (Math.abs(e1.getY() - e2.getY()) > SWIPE_MAX_OFF_PATH) 
      { 
       return false; 
      } 

      //toast("start = "+String.valueOf(e1.getX())+" | end = "+String.valueOf(e2.getX()) ); 
      //from left to right 
      if(e2.getX() > e1.getX()) 
      { 
       if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) 
       { 
        onSwipeRight(); 
        return true; 
       } 
      } 

      if(e1.getX() > e2.getX()) 
      { 
       if (e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) 
       { 
        onSwipeLeft(); 
        return true; 
       } 
      } 

      return false; 
     } 
    } 

    @Override 
    public boolean dispatchTouchEvent(MotionEvent ev) 
    { 
     // TouchEvent dispatcher. 
     if (gestureDetector != null) 
     { 
      if (gestureDetector.onTouchEvent(ev)) 
      // If the gestureDetector handles the event, a swipe has been 
      // executed and no more needs to be done. 
      return true; 
     } 

     return super.dispatchTouchEvent(ev); 
    } 

    @Override 
    public boolean onTouchEvent(MotionEvent event) 
    { 
     return gestureDetector.onTouchEvent(event); 
    } 
} 

Poi si estendono MainActivity da _SwipeActivityClass

implementare metodi, onSwipeLeft() e onSwipeRight() per avviare un'altra attività

SOURCE HERE