6

Próbuję zaimplementować transakcję fragmentu z animacją slajdów/wylogowania. Zajmuję się minimum 14 SDK, więc ObjectAnimator jest dla mnie jedyną opcją (czy istnieje jakaś inna metoda? Tłumaczenie animacji jest niedostępne, jak rozumiem).FragmentTransacation z animacją slajdów/out na> 4 wydajności

Kodeks jest bardzo prosta:

AnimationView.java - klasa 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); 
} 
} 

Przesuń w & z 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"/> 

Animacje działa idealny, jak widać użyłem właściwość niestandardową yFraction. Ale wydajność jest bardzo zła ... w niektórych tabletkach zauważyłem poziomą białą linię (około 3 px wysokości) podczas animacji, w innym smartfonie po prostu zwolnił (nie trwa długo, ale migotanie).

znalazłem sposób aby to naprawić jeśli ustawić valueFrom & valueTo dopasować wymiar widok, ale to nie jest nazwą rodzajową i muszą być od 0 do 1 za rodzajową dla wszystkich widoków

ceniłaby jeśli niektóre może mi pomóc lub powiedzieć, czy istnieje inny sposób wdrożenia na Androidzie 14 i nowszych.

Dzięki.

Odpowiedz

-4

Spróbuj tego:

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