6

Sto tentando di implementare la transazione di frammento con l'animazione slide in/out. Sto sviluppando su minimo 14 sdk quindi ObjectAnimator è l'unica opzione per me (c'è un altro modo? L'animazione di traduzione non è disponibile come ho capito).FragmentTransacation con animazione slide in/out su> 4 performance

il codice è molto semplice:

AnimationView.java - classe wrapper

public class AnimationView extends LinearLayout { 

public AnimationView(Context context, AttributeSet attrs) { 
    super(context, attrs); 
} 


public float getYFraction() { 
    return getHeight(); 
} 

public void setYFraction(float yFraction) { 
    final int height = this.getHeight(); 
    setY((height > 0) ? (yFraction * height) : -9999); 
} 
} 

scorrere in & fuori di xml

<?xml version="1.0" encoding="utf-8"?> 
<set> 
<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android" 
       android:interpolator="@android:anim/accelerate_decelerate_interpolator" 
       android:propertyName="yFraction" 
       android:valueType="floatType" 
       android:valueFrom="-1" 
       android:valueTo="0" 
       android:duration="600"/> 

<?xml version="1.0" encoding="utf-8"?> 
<set> 
<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android" 
       android:interpolator="@android:anim/accelerate_decelerate_interpolator" 
       android:propertyName="yFraction" 
       android:valueType="floatType" 
       android:valueFrom="0" 
       android:valueTo="1" 
       android:duration="600"/> 

animazioni funziona perfetto, come potete vedere ho usato yFraction proprietà personalizzata. Ma le prestazioni sono pessime ... in alcune tavolette ho notato una linea bianca orizzontale (circa 3 px di altezza) durante l'animazione, in altri dispositivi dello smartphone è andato solo per rallentare (non per la lentezza ma per il tremolio).

ho trovato un modo per risolvere il problema, se ho impostato valueFrom & valueto per adattarsi alla dimensione vista, ma non è generica e bisogno di essere 0-1 per essere generico per tutte le viste

saremmo grati se qualche mi può aiutare o dirmi se c'è un altro modo per implementare su Android 14 e fino.

Grazie.

risposta

-4

Prova questo:

if (mLastMenuWeight > mMenuWeight) { 
transaction.setCustomAnimations(android.R.anim.slide_in_left, android.R.anim.slide_out_right); 
}else{transaction.setCustomAnimations(R.anim.slide_in_right, R.anim.slide_out_left);}