2011-09-29 64 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(),它会做一个动画