我有一个Gallery小部件设置为每10000毫秒自动前进。然而,观点之间的过渡是即时的,我宁愿进行过渡。
我的推进方法是这样的:
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 :(得分:0)
问题是因为您使用了 setSelection(),这显然不会让您感觉图库正在滚动。因此,您必须覆盖图库的 onScroll(),而不是使用 setSelection()。
这是你如何做到的。
假设您已经定期进行自动推进的必要步骤,现在执行此代码。
MotionEvent e1, e2;
gallery.onScroll(e1, e2, scroll_limit , 0); //scroll limit is your integer variable for scroll limit.
答案 1 :(得分:0)
我提出的答案是Gallery API非常不可扩展。有多个软件包私有或私有方法可以在没有kludge的情况下解锁此功能,包括moveNext,FlingRunnable.startwithdistance和scrollToChild。唉,他们都无法使用。
相反,我能够提出的最佳答案是覆盖setSelection以获取我需要的所有行为。在setSelection方法中,我反转减速算法以计算计算距离的速度,然后调用onFling。这是一个讨厌的kludge可以通过使上述任何方法受到保护或公开更好(我无法理解为什么至少moveNext和scrollToChild不应该)。
答案 2 :(得分:0)
我有一个类似的任务来制作项目动画,我决定选择画廊,所以我尝试了很多东西,但最好的方法是继承画廊并添加它:
boolean 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()即可进行动画