我有一个ViewAnimator
(确切地说ViewSwitcher
),其中有与之关联的淡入/淡出动画和两个Views
,我使用ViewAnimator.showNext()
和{{}进行过渡{1}}方法。
我的应用程序中有一项要求,有时我需要直接从第二个ViewAnimator.showPrevious()
开始,而不显示从第一个View
到第二个View
的淡入淡出动画。任何人都知道是否有一种直接的方法可以实现这一目标,而不必处理与我ViewAnimator
相关的输入/输出动画?
注意:我尝试过调用
ViewAnimator.setDisplayedChild(1)
,但这也会动画过渡。
答案 0 :(得分:17)
我环顾四周等待回应,但我猜这是不可能的。因此,如果没有更好的解决方案,当您想要直接跳转到ViewAnimator
的特定子View
时,请将ViewAnimator
的进/出动画设置为null,如下所示:
myViewAnimator.setInAnimation(null);
myViewAnimator.setOutAnimation(null);
myViewAnimator.setDisplayedChild(childIndex);
如果有人知道更好的方式 - 而不是使用ViewAnimator
的动画片进/出动画 - 请分享!
答案 1 :(得分:7)
不幸的是,没有内置函数可以做到这一点,但你可以添加这个功能,它可以完成这项工作:
public static void setDisplayedChildNoAnim(ViewAnimator viewAnimator, int whichChild) {
Animation inAnimation = viewAnimator.getInAnimation();
Animation outAnimation = viewAnimator.getOutAnimation();
viewAnimator.setInAnimation(null);
viewAnimator.setOutAnimation(null);
viewAnimator.setDisplayedChild(whichChild);
viewAnimator.setInAnimation(inAnimation);
viewAnimator.setOutAnimation(outAnimation);
}
答案 2 :(得分:0)
这是一种更全面的方法,可让您选择id或视图,以及是否带有动画:
fun ViewAnimator.setViewToSwitchTo(viewToSwitchTo: View, animate: Boolean = true): Boolean {
if (currentView === viewToSwitchTo)
return false
for (i in 0 until childCount) {
if (getChildAt(i) !== viewToSwitchTo)
continue
if (animate)
displayedChild = i
else {
val outAnimation = this.outAnimation
val inAnimation = this.inAnimation
this.inAnimation = null
this.outAnimation = null
displayedChild = i
this.inAnimation = inAnimation
this.outAnimation = outAnimation
}
return true
}
return false
}
fun ViewAnimator.setViewToSwitchTo(@IdRes viewIdToSwitchTo: Int, animate: Boolean = true): Boolean {
if (currentView.id == viewIdToSwitchTo)
return false
for (i in 0 until childCount) {
if (getChildAt(i).id != viewIdToSwitchTo)
continue
if (animate)
displayedChild = i
else {
val outAnimation = this.outAnimation
val inAnimation = this.inAnimation
this.inAnimation = null
this.outAnimation = null
displayedChild = i
this.inAnimation = inAnimation
this.outAnimation = outAnimation
}
return true
}
return false
}
用法示例:
viewSwitcher.setViewToSwitchTo(someView,false)