可以直接跳转到ViewAnimator第二视图(Possible to jump straight

2019-07-30 04:12发布

我有一个ViewAnimatorViewSwitcher要准确)进/出与其关联的动画褪色和两个Views ,我使用之间转变ViewAnimator.showNext()ViewAnimator.showPrevious()方法。

有一个在我的应用程序的要求,其中有时我需要从第二直开始View ,不显示在从第一去一个动画渐变View到秒。 任何人都知道,如果没有做到这一点没有关联到我的内/外动画不必浪费时间的简单方法ViewAnimator

注:我已经打过电话ViewAnimator.setDisplayedChild(1)但也动画过渡。

Answer 1:

我环顾四周,等待响应,但我猜这是不可能的。 因此,在没有更好的解决办法,将您ViewAnimator的进/出动画,当你想直接跳转到一个特定的子空View您的ViewAnimator ,具体如下:

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

如果有人知道一个更好的方式-而不是与打ViewAnimator /出动画的-请您分享!



Answer 2:

不幸的是,没有内置的功能,要做到这一点,但你可以添加此功能,这项工作:

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);
}


Answer 3:

这里有一个更全面的方式,让您选择使用一个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)


文章来源: Possible to jump straight to second view in ViewAnimator