yumuşak geçişler için Android Jetpack Navigasyon ile önceden yükleyin fragmanları

oy
0

Bazı önceden yüklemesini mümkün mü Fragmentsile Navigasyon Mimarlık Bileşeni yumuşak geçişler elde etmek için Android Jetpack dan?

Ön yükleme olmadan ben ilk için yumuşak geçişler olsun asla navigate()çağrıları (hatta ileri teknoloji cihazlarda). Şu anda kullanıyorum app:enterAnim, app:exitAnimbenim, vb etiketleri nav_graph.xml.

Ben Telgraf uygulamasında gibi yumuşak geçişler gerçekleştirmek için çalışıyorum (Her şeyi yüklemeli öncesi ve sadece animasyon onlar olduğunu düşünüyorum Fragmentsgibi Views).

Belki bazı gizli XML özelliği var mı app:preload=true?

Ben sadece sorunun yanıtlarını tam sormuyorum - küçük optimizasyonlar da bekliyoruz!

Geldim ne kadar:

anim_nav_enter.xml

<set
    android:duration=200
    android:shareInterpolator=true>
    <!-- Fade in from the right on enter -->
    <alpha
        android:fromAlpha=0.0
        android:toAlpha=1.0 />
    <translate
        android:fromXDelta=10%
        android:toXDelta=0% />
    <scale
        android:fromXScale=1.0
        android:fromYScale=1.0
        android:toXScale=1.0
        android:toYScale=1.0 />
    </set>

anim_nav_exit.xml

<set
    android:duration=300
    android:shareInterpolator=true>
    <!-- Fade out on exit -->
    <alpha
        android:fromAlpha=1.0
        android:toAlpha=0.0 />
    <scale
        android:fromXScale=1.0
        android:fromYScale=1.0
        android:toXScale=1.0
        android:toYScale=1.0 />
</set>

anim_nav_pop_enter.xml

<set
    android:duration=200
    android:shareInterpolator=true>
    <!-- Fade in on pop enter -->
    <alpha
        android:fromAlpha=0.0
        android:toAlpha=1.0 />
    <scale
        android:fromXScale=1.0
        android:fromYScale=1.0
        android:toXScale=1.0
        android:toYScale=1.0 />
</set>

anim_nav_pop_exit.xml

<set
    android:duration=200
    android:shareInterpolator=true>
    <!-- Fade out to the right on pop exit -->
    <alpha
        android:fromAlpha=1.0
        android:toAlpha=0.0 />
    <translate
        android:fromXDelta=0%
        android:toXDelta=10% />
    <scale
        android:fromXScale=1.0
        android:fromYScale=1.0
        android:toXScale=1.0
        android:toYScale=1.0 />
</set>

BaseFragment.kt

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    allowEnterTransitionOverlap = true
    allowReturnTransitionOverlap = true
}

override fun onCreateAnimation(transit: Int, enter: Boolean, nextAnim: Int): Animation? {
    var animation = super.onCreateAnimation(transit, enter, nextAnim)
    if (animation == null && nextAnim != 0) {
        animation = AnimationUtils.loadAnimation(activity, nextAnim)
    }
    if (animation != null) {
        view?.setLayerType(View.LAYER_TYPE_HARDWARE, null)
        animation.setAnimationListener(object : AnimationListener {
            override fun onAnimationRepeat(animation: Animation?) {
            }

            override fun onAnimationStart(animation: Animation?) {
            }

            override fun onAnimationEnd(animation: Animation?) {
                view?.setLayerType(View.LAYER_TYPE_NONE, null)
            }
        })
    }
    return animation
}
Oluştur 22/08/2018 saat 12:10
kaynak kullanıcı
Diğer dillerde...                            

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more