12

我有一个ViewAnimatorViewSwitcher准确地说)与它相关的淡入/淡出动画和两个Views我在使用ViewAnimator.showNext()andViewAnimator.showPrevious()方法之间转换的动画。

我的应用程序中有一个要求,有时我需要直接从第二个开始View,而不显示从第一个View到第二个的淡入淡出动画。任何人都知道是否有一种简单的方法可以实现这一点,而不必弄乱与 my 相关的输入/输出动画ViewAnimator

注意:我尝试过调用ViewAnimator.setDisplayedChild(1),但这也会为过渡设置动画。

4

3 回答 3

17

我环顾四周,等待回应,但我猜这是不可能的。因此,在没有更好的解决方案的情况下,ViewAnimator当您想直接跳转到您的特定子级时,请将您的输入/输出动画设置为 null ViewViewAnimator如下所示:

myViewAnimator.setInAnimation(null);
myViewAnimator.setOutAnimation(null);
myViewAnimator.setDisplayedChild(childIndex);

如果有人知道更好的方法 - 而不是玩ViewAnimator's in/out 动画 - 请分享!

于 2012-08-14T19:00:25.847 回答
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);
}
于 2014-04-09T15:09:35.153 回答
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)
于 2019-03-11T12:48:00.960 回答