2010-09-26 10 views

risposta

6

Gallery.setSelection (posizione int, booleano animato);

consultare qui sotto URL: http://groups.google.com/group/android-developers/browse_thread/thread/9140fd6af3061cdf/7f89e53ae53e455b?lnk=gst&q=setselection#7f89e53ae53e455b

Soln: Se siete ancora alla ricerca, ho due soluzioni possibili per voi, sia leggermente spiacevoli:

(1) È possibile effettuare la galleria fa un'avventura con una velocità scelta, quindi:

myGallery.onFling (null, null, velocity, 0);

Modificando la velocità, è possibile impostare i valori per spostare la selezione di uno o due in entrambe le direzioni. Dato che la Galleria si auto-centra, non è necessario che abbia la giusta destinazione.

(2) Poiché è disponibile la fonte della Raccolta, è possibile modificarla per implementare la propria Galleria per . Non sembra che sia necessario aggiungere il codice per poter controllare un'avventura in modo da terminare alla selezione selezionata di .

Ho pensato che dovevo fare (2), ma ho trovato che potevo scappare con (1) per il mio problema.

+0

Metodo (1) funziona benissimo, basta assicurarsi di utilizzare una velocità sufficientemente grande. Peccato che i documenti di Android qui siano così fuorvianti: "Notificato di un evento di fling quando si verifica" è IMHO errato, dovrebbe dire qualcosa del tipo: "Dice alla galleria di eseguire un'avventura" o il metodo dovrebbe essere chiamato performFling – pheelicks

2

Stavo guardando attraverso la fonte della galleria per vedere se potevo ottenere questa funzione. Sembra che qualcosa sia possibile con questo codice. Tuttavia ho rinunciato prima che potessi farlo funzionare. Sembra che non stia passando le coordinate corrette in modo che res sia sempre restituito falso. Restituirebbe vero se funzionasse.

Pubblicando semplicemente questo qui nel caso in cui qualcun altro vuole fare un tentativo di risolverlo! (Per favore pubblica la tua soluzione se la gestisci!)

Rect rect = new Rect(); 
gallery.getHitRect(rect); 


int x = rect.centerX()+getWindowManager().getDefaultDisplay().getWidth(); 
int y = rect.centerY(); 

MotionEvent event = MotionEvent.obtain(100, 100, MotionEvent.ACTION_DOWN, x, y, 0); 
timesGallery.onDown(event); 
boolean res = timesGallery.onSingleTapUp(null); 
2

Ho apportato pochi cambiamenti nel codice dato da "Kurru". ora funziona

Rect rect = new Rect(); 
    gallery.getHitRect(rect); 

    int width = Math.abs(rect.width()); 
    if(!isForwardScroll){ 
     width = width * -1; 
    } 
    int x = rect.centerX()+width/2; 
    int y = rect.centerY(); 

    MotionEvent event = MotionEvent.obtain(100, 100, MotionEvent.ACTION_DOWN, x, y, 0); 
    gallery.onDown(event); 
    boolean res = gallery.onSingleTapUp(null); 
+0

puoi dare più codice o esempio?grazie – pengwang

6

Sulla base dell'eccellente idea di Kurru di simulare il clic su vista precedente o successiva.

//scroll forward or backward 
private void scroll(int type){ 
    View selectedV = mG.getSelectedView(); 
    int idx = mG.indexOfChild(selectedV); 
    switch(type){ 
     case FORWARD: 
    default: 
     if(idx<mG.getChildCount()-1) 
      idx++; 
     break; 
    case BACKWARD: 
     if(idx>0) 
      idx--;   
     break; 
    } 
    //now scrolled view's child idx in gallery is gotten 
    View nextView = mG.getChildAt(idx); 
    //(x,y) in scrolled view is gotten 
    int x = nextView.getLeft()+nextView.getWidth()/2; 
    int y = nextView.getTop()+nextView.getHeight()/2; 
    String out = String.format("x=%d, y=%d", x, y); 
    Log.i(TAG+".scroll", out); 

    //Kurru's simulating clicking view 
    MotionEvent event = MotionEvent.obtain(100, 100, MotionEvent.ACTION_DOWN, x, y, 0); 
    mG.onDown(event); 
    boolean res = mG.onSingleTapUp(null); 
    Log.i(TAG+".scroll", "onSingleTapUp return =" + res);  
} 
12

Proprio ora ho questo problema. Ero bisogno di muovere un solo elemento della galleria, in modo che la soluzione migliore per me era di emulare chiave evento giù

myGallery.onKeyDown(KeyEvent.KEYCODE_DPAD_RIGHT, null); 

o

myGallery.onKeyDown(KeyEvent.KEYCODE_DPAD_LEFT, null); 
Problemi correlati