自动推进画廊动画

时间:2011-09-29 06:56:18

标签: android animation android-gallery

我有一个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”,但转换仍然会立即在状态之间弹出。

3 个答案:

答案 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()即可进行动画