2010-09-26 22 views

cevap

6
Gallery.setSelection (int position, boolean animate); http://groups.google.com/group/android-developers/browse_thread/thread/9140fd6af3061cdf/7f89e53ae53e455b?lnk=gst&q=setselection#7f89e53ae53e455b

SOLN:

URL'ye aşağıda bakınız Hala aradığınız , ben size iki olası çözümler, hem hafifçe tatsız vardır:

(1) Bu galeri do yapabilirsiniz seçilen hıza sahip bir atım, böylece:

myGallery.onFling (boş, null, hız, 0);

Hız ayarlayarak, seçimini her iki yönde bir veya iki tarafından hareket ettirmek için değerler ayarlayabilirsiniz. Galeri öz merkezleri olarak, hedefi tam olarak doğru olarak almanız gerekmiyor .

(2) Galeri kaynağı mevcut olduğundan, kendi Galeri'nizi uygulayabilmek için değiştirebilirsiniz. Seçtiğiniz seçiminde sona erdirmek için bir fling'i kontrol edebilmek için çok kod eklemeniz gerektiği gibi görünmüyor.

Yapmak zorunda olduğumu sanıyordum (2), ama problemim için (1) ile 'u bulabildiğimi keşfettim.

+0

Yöntem taklit etmekti (1) Büyük, sadece kullandığınız emin olun çalışır Yeterince büyük bir hız. Android docs burada utanç çok yanıltıcı: "Ne zaman bir fling olayı bildirildi" yanlış IMHO, gibi bir şey söylemeliyim: "Galeri bir kaçamak yapmak için söyler" veya yöntem performFling – pheelicks

2

Bu özelliği alıp alamayacağımı görmek için Galeri kaynağını inceliyordum. Bu kod ile bir şey mümkün görünüyor. Ancak çalışmayı başaramadan vazgeçtim. Sanki doğru koordinatlarda geçmiyormuşum gibi görünüyorum, bu yüzden daima yanlış geri döndü. Çalışırsa doğru olur.

Sadece burada bir başkasını göndermek, başka biri bunu düzeltmek için vermek ister! (Eğer varsa, lütfen çözümünüzü gönderin!)

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

"Kurru" tarafından verilen kodda küçük bir değişiklik yaptım. bu şimdi çalışıyor

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

çağrılabilir daha fazla kod verebilir misiniz ya da örnek?teşekkür ederim – pengwang

6

Kurru'nun bir sonraki veya bir önceki görünümü tıklatmayı simüle etme üzerine mükemmel düşüncesine dayanmaktadır.

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

Şimdi bu sorunu yaşıyorum. Ben galerinin sadece bir elemanını taşımak gerekir, bu yüzden bana iyi çözüm anahtarı aşağı olayı

myGallery.onKeyDown(KeyEvent.KEYCODE_DPAD_RIGHT, null); 

veya

myGallery.onKeyDown(KeyEvent.KEYCODE_DPAD_LEFT, null); 
İlgili konular