我有一个ViewAnimator
( ViewSwitcher
要准确)进/出与其关联的动画褪色和两个Views
,我使用之间转变ViewAnimator.showNext()
和ViewAnimator.showPrevious()
方法。
有一个在我的应用程序的要求,其中有时我需要从第二直开始View
,不显示在从第一去一个动画渐变View
到秒。 任何人都知道,如果没有做到这一点没有关联到我的内/外动画不必浪费时间的简单方法ViewAnimator
?
注:我已经打过电话ViewAnimator.setDisplayedChild(1)
但也动画过渡。
我环顾四周,等待响应,但我猜这是不可能的。 因此,在没有更好的解决办法,将您ViewAnimator
的进/出动画,当你想直接跳转到一个特定的子空View
您的ViewAnimator
,具体如下:
myViewAnimator.setInAnimation(null);
myViewAnimator.setOutAnimation(null);
myViewAnimator.setDisplayedChild(childIndex);
如果有人知道一个更好的方式-而不是与打ViewAnimator
/出动画的-请您分享!
不幸的是,没有内置的功能,要做到这一点,但你可以添加此功能,这项工作:
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);
}
这里有一个更全面的方式,让您选择使用一个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)