2011-09-29 123 views
0

我有一個畫廊構件設置爲每10000ms自動前進。然而,視圖之間的過渡是即時的,我寧願有一個過渡。自動推進畫廊動畫

我前進的方法是像這樣:

private void tickerAdvance() { 
    int selectedItemPosition = mTickerGallery.getSelectedItemPosition(); 
    if (selectedItemPosition + 1 == mTickerGallery.getCount()) { 
     mTickerGallery.setSelection(0, true); 
    } else { 
     mTickerGallery.setSelection(selectedItemPosition + 1, true); 
    } 
} 

我的印象是,動畫設置爲true,會導致其狀態時的動畫。在我的XML中,我還添加了animationDuration =「500」,但是轉換仍然立即在狀態之間彈出。

+0

我不知道你是怎麼做的,但我有一個與horizo​​ntalscrollview由剛上滾動視圖設置動畫使得過渡動畫製作。 – PedroAGSantos

回答

0

我想出的答案是Gallery API非常不可擴展。有多個包私有或私有方法可以解鎖此功能,而不需要包含moveNext,FlingRunnable.startwithdistance和scrollToChild。唉,他們都不可用。

相反,我能夠想出的最佳答案是覆蓋setSelection以獲得我需要的所有行爲。在setSelection方法中,我反轉減速算法以計算所計算距離的速度,然後調用onFling。這是一個令人討厭的kludge可以通過使上述任何方法受到保護或公開(我無法理解爲什麼至少moveNext和scrollToChild不應該這樣做)。

0

問題是因爲您已經使用了setSelection(),這顯然不會讓您感覺到正在滾動的圖庫。 SO而不是使用setSelection()您必須覆蓋gallery上的onScroll()

下面是你是如何做到的。

假設您已經爲定期自動前進做了必要的步驟,現在執行此代碼。

MotionEvent e1, e2; 
gallery.onScroll(e1, e2, scroll_limit , 0); //scroll limit is your integer variable for scroll limit. 
+0

除非我誤用了某些東西,否則onScoll似乎沒有更好的行爲。雖然這導致我考慮使用onFling,它會有適當的行爲。這兩種方法都讓我感到困擾,因爲我不喜歡這種使用手勢事件處理程序的想法......但它可能是唯一合理的方法。 – John

0

我有一個類似的任務,使項目項動畫和我決定選擇畫廊,所以我嘗試了很多東西,但最好的方法是繼承畫廊和補充一點:

布爾avoidSound = FALSE ;

public void showNext() { 
    avoidSound = true; 
    this.onKeyDown(KeyEvent.KEYCODE_DPAD_RIGHT, null); 
} 


public void playSoundEffect(int soundConstant) { 
    if (avoidSound) { 
     avoidSound = false; 
    } else { 
     super.playSoundEffect(soundConstant); 
    } 
} 

只需調用showNext(),它會做一個動畫