2010-09-26 71 views

回答

6

Gallery.setSelection(int position,boolean animate);

請參考下網址: http://groups.google.com/group/android-developers/browse_thread/thread/9140fd6af3061cdf/7f89e53ae53e455b?lnk=gst&q=setselection#7f89e53ae53e455b

溶液: 如果你還在尋找,我對你有兩種可能的解決方案,既 略有不快:

(1)您可以在畫廊做一個具有選定速度的投擲,因此:

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

通過調整速度,您可以設置值以將選擇 在任一方向上移動一個或兩個。由於圖庫自我中心,您不需要完全正確地獲取目的地。

(2)由於Gallery源代碼可用,您可以修改它以便 實現您自己的Gallery。它看起來好像你需要添加很多代碼才能控制投擲,以便在選擇的 選項結束。我認爲我必須要做(2),但發現我可以用(1)爲我的問題脫身 。

+0

方法(1)的偉大工程,只是確保你使用足夠大的速度。讓我們感到羞恥的是,這裏的Android文檔是如此的具有誤導性:「當它發生時通知其發生的事件」是不正確的,恕我直言,應該這樣說:「告訴圖庫執行一次投擲」或者該方法應該被稱爲performFling – pheelicks 2011-05-03 18:06:27

2

我正在通過圖庫源查看是否可以獲得此功能。它看起來像這個代碼可能有些東西。然而,我放棄之前,我可以得到它的工作。好像我沒有傳入正確的座標,所以res總是返回false。如果它能夠工作,將會返回true。

只是在這裏發佈這個案件,以防別人想要去修復它! (如果你管理它,請發表您的解決方案!)

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」給出代碼變化不大。這正在工作

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

你能提供更多的代碼或例子?謝謝 – pengwang 2011-05-15 04:35:14

6

基於庫魯的模擬點擊下一個或上一個視圖的出色想法。

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

剛纔我有這個問題。我需要畫廊的一個元素移動,所以對我來說最好的解決辦法是效仿鍵按下事件

myGallery.onKeyDown(KeyEvent.KEYCODE_DPAD_RIGHT, null); 

myGallery.onKeyDown(KeyEvent.KEYCODE_DPAD_LEFT, null);