6

Slayt giriş/çıkış animasyonu ile parça işlemi gerçekleştirmeye çalışıyorum. En az 14 sdk üzerinde geliştiriyorum, bu yüzden ObjectAnimator benim için tek seçenektir (başka bir yol var mı? çeviri animasyonu anladığım kadar uygun değil).FragmentTransacation giriş/çıkış animasyonu> 4 performansta

Kod çok basit:

AnimationView.java - xml en

<?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"/> 

üzerinden & yılında sarmalayıcı sınıf

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

kaydırın Eğer ben özel özellik yFraction kullanılan görebileceğiniz gibi 210

<?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"/> 

Animasyonlar, mükemmel çalışır. Ama performans çok kötü ... Bazı tabletlerde, animasyon sırasında yatay bir beyaz çizgi (yaklaşık 3 px yükseklik) fark ettim, diğer akıllı telefon cihazında sadece yavaşlamaya (yavaş ama Flickering değil) gitti. Ben valueFrom & valueTo görünüm boyutunu sığdırmak için, ancak ilk başta jenerik değil ve

bazı seviniriz tüm görünümler için genel olması 1'e 0 olması gerekiyorsa

bunu düzeltmek için bir yol bulmuş android 14 ve üstü üzerinde uygulamak için başka bir yolu varsa bana yardımcı olabilir veya bana söyleyebilir.

Teşekkürler.

cevap

-4

bu deneyin:

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