SORU
8 ŞUBAT 2011, Salı


Animasyon parçaları arasında geçiş

Parçalar arasında geçiş animasyon yapmaya çalışıyorum. Aşağıdaki cevabı aldım
Android Fragments and animation

FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.setCustomAnimations(R.anim.slide_in_left, R.anim.slide_out_right);

DetailsFragment newFragment = DetailsFragment.newInstance();

ft.replace(R.id.details_fragment_container, newFragment, "detailFragment");

// Start the animated transition.
ft.commit();

Ve benim R. kullanılabilir.slide_in_left

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
        <translate android:fromXDelta="50%p" android:toXDelta="0"
            android:duration="@android:integer/config_mediumAnimTime"/>
       <alpha android:fromAlpha="0.0" android:toAlpha="1.0"
            android:duration="@android:integer/config_mediumAnimTime" />
</set>

Ama bu çalıştığımda gösterdi

02-08 16:27:37.961: ERROR/AndroidRuntime(1717): FATAL EXCEPTION: main
02-08 16:27:37.961: ERROR/AndroidRuntime(1717): java.lang.RuntimeException: Unknown animator name: translate
02-08 16:27:37.961: ERROR/AndroidRuntime(1717):     at android.animation.AnimatorInflater.createAnimatorFromXml(AnimatorInflater.java:129)
02-08 16:27:37.961: ERROR/AndroidRuntime(1717):     at android.animation.AnimatorInflater.createAnimatorFromXml(AnimatorInflater.java:126)
02-08 16:27:37.961: ERROR/AndroidRuntime(1717):     at android.animation.AnimatorInflater.createAnimatorFromXml(AnimatorInflater.java:93)
02-08 16:27:37.961: ERROR/AndroidRuntime(1717):     at android.animation.AnimatorInflater.loadAnimator(AnimatorInflater.java:72)
02-08 16:27:37.961: ERROR/AndroidRuntime(1717):     at android.app.FragmentManagerImpl.loadAnimator(FragmentManager.java:621)
02-08 16:27:37.961: ERROR/AndroidRuntime(1717):     at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:733)
02-08 16:27:37.961: ERROR/AndroidRuntime(1717):     at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:919)
02-08 16:27:37.961: ERROR/AndroidRuntime(1717):     at android.app.BackStackRecord.run(BackStackRecord.java:578)
02-08 16:27:37.961: ERROR/AndroidRuntime(1717):     at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1217)

Herhangi bir fikir? API referans Petek baktığımda translate. Ne kaçırdım?
Parçalar arasında geçiş animasyon için başka bir yol var mı? Teşekkür ederim

CEVAP
8 ŞUBAT 2011, Salı


FragmentTransaction.setTransition 12 *ile android.animation yeni çerçeve (animasyon nesne) kullanmak gerekir.

İşte ApiDemos setCustomAnimations kullanarak üzerinde bir örnek'FragmentHideShow.java:

ft.setCustomAnimations(android.R.animator.fade_in, android.R.animator.fade_out);

ve buradan ilgili animatör XMLres/animator/fade_in.xml:

<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
    android:interpolator="@android:interpolator/accelerate_quad"
    android:valueFrom="0"
    android:valueTo="1"
    android:propertyName="alpha"
    android:duration="@android:integer/config_mediumAnimTime" />

Eski animasyon çerçeve ile olabilir gibi birden fazla animasyon <set> kullanarak birleştirebilirsiniz unutmayın.


EDİT: Millet slayt-in/-out slide hakkında soru soruyor beri, burada açıklayacağım.

Slayt-ve-dışarı kaydırın

Elbette, *, x, *translationY18 ve y özelliklerini animasyon olabilir, ama genellikle slaytlar ve off-ekrana gelen animasyon içerik dahil. Göreli değerleri kullanan herhangi bir çeviri özellikleri yok bildiğim kadarıyla. Ancak, bu onları kendine yazmasını engellemez. Tesiste animasyon sadece animasyon olduğunuz nesneler üzerinde alıcı ve ayarlayıcı yöntemleri gerektirir unutmayın (bu durumda görünümleri), sadece bu yüzdenkendi oluşturungetXFraction setXFraction gibi görünüm alt sınıf yöntemleri:

public class MyFrameLayout extends FrameLayout {
    ...
    public float getXFraction() {
        return getX() / getWidth(); // TODO: guard divide-by-zero
    }

    public void setXFraction(float xFraction) {
        // TODO: cache width
        final int width = getWidth();
        setX((width > 0) ? (xFraction * width) : -9999);
    }
    ...
}

Animasyon artık 'özelliği, bunun gibi . xFraction

res/animator/slide_in.xml:

<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
    android:interpolator="@android:anim/linear_interpolator"
    android:valueFrom="-1.0"
    android:valueTo="0"
    android:propertyName="xFraction"
    android:duration="@android:integer/config_mediumAnimTime" />

Eğer animasyon sende nesnenin üst aynı genişlikte değil. öyleyse işler emlak uygulama tweak kullanma durumu uygun ihtiyaç duyabilirsiniz bu yüzden oldukça doğru bakmak olmaz unutmayın.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Andrey Menshikov

    Andrey Mensh

    28 Ocak 2012
  • kylediablo

    kylediablo

    8 Ocak 2007
  • Sparta Spartanutul

    Sparta Spart

    18 HAZİRAN 2013