2013-03-09 29 views
5

İki animasyonlar bir dizi var, hem animasyonlar ben translate animasyon aşmasına istediğiniz aşım aradeğerleyiciAndroid Eşzamanlı interpolators kullanmak mümkün mü?

<?xml version="1.0" encoding="utf-8"?> 
<set xmlns:android="http://schemas.android.com/apk/res/android" 
    android:interpolator="@android:anim/overshoot_interpolator" > 

    <translate 
     android:duration="6000" 
     android:fromXDelta="100%" android:toXDelta="0%" /> 

    <scale 
     android:duration="6000" 
     android:fromXScale="1.0" android:toXScale="0.6" 
     android:pivotX="0" 
     android:fromYScale="1.0" android:toYScale="1.0" 
     android:repeatCount="1" 
     android:repeatMode="reverse" /> 
</set> 

ve hızlandırmak için scale animasyon kullanarak birlikte çalışacak.
Bunu yapmaya çalıştım ama çalışmıyor: Yalnızca bir interpolator tek bir nesne üzerinde yapılan tüm animasyonlar için belirli bir zamanda etkin olabilir gibi görünüyor

<?xml version="1.0" encoding="utf-8"?> 
<set xmlns:android="http://schemas.android.com/apk/res/android" > 

    <translate 
     android:interpolator="@android:anim/overshoot_interpolator" 
     android:duration="6000" 
     android:fromXDelta="100%" android:toXDelta="0%" /> 

    <scale 
     android:interpolator="@android:anim/accelerate_interpolator" 
     android:duration="6000" 
     android:fromXScale="1.0" android:toXScale="0.6" 
     android:pivotX="0" 
     android:fromYScale="1.0" android:toYScale="1.0" 
     android:repeatCount="1" 
     android:repeatMode="reverse" /> 
</set> 

.

cevap

3

Animasyonları ayırıp görüntüyü içeren bir ImageView ve diğerini de RelativeLayout ürününe ekledim.

Tercüman

<?xml version="1.0" encoding="utf-8"?> 

<set xmlns:android="http://schemas.android.com/apk/res/android"> 

    <translate 
      android:interpolator="@android:anim/overshoot_interpolator" 
      android:duration="6000" 
      android:fromXDelta="100%" android:toXDelta="0%" /> 

</set> 

Scalor

<?xml version="1.0" encoding="utf-8"?> 
<set xmlns:android="http://schemas.android.com/apk/res/android" > 

    <scale 
      android:interpolator="@android:anim/accelerate_interpolator" 
      android:duration="6000" 
      android:fromXScale="1.0" android:toXScale="0.6" 
      android:pivotX="0" 
      android:fromYScale="1.0" android:toYScale="1.0" 
      android:repeatCount="1" 
      android:repeatMode="reverse" /> 
</set> 

xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
        android:id="@+id/previousItem" 
        android:layout_height="wrap_content" 
        android:layout_alignParentBottom="true" 
        android:layout_alignParentLeft="true" 
        android:onClick="goToPreviousItem" 
        android:layout_margin="@dimen/float_from_edges" 
        android:layout_width="wrap_content" 
      > 
     <ImageView android:id="@+id/previousItemArrow" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:background="@drawable/arrow_left" 
       /> 
    </RelativeLayout> 

Ve kaynak kodu bunu teşvik etmek:

RelativeLayout previousItemButton = (RelativeLayout)findViewById(R.id.previousItem); 
    ImageView myButton = (ImageView)findViewById(R.id.previousItemArrow); 
    Animation translator = 
      AnimationUtils.loadAnimation(this, R.anim.translator); 
    myButton.startAnimation(translator); 

    Animation scalor = 
      AnimationUtils.loadAnimation(this, R.anim.scalor); 
    previousItemButton.startAnimation(scalor); 

Çok güzel göründüğünü düşündüm. Hangi etkinin umduğundan emin değilim.

9

Bu sadece tahmin çalışmasıdır.'un yapıcılarından birinin argüman alabileceğini hatırlıyorum, yani shareInterpolator.

Parametrenin ismine bakarak, bu büyük olasılıkla sizde yanlış olarak ayarlanmalıdır. Şu anda, varsayılan "değer" kullanmalıdır. Bu varsayılan değer büyük olasılıkla true çünkü her biri için farklı bir tane belirttiğiniz halde animasyonlarınız farklı ara değişkenlere sahip değil.

setFlag(PROPERTY_SHARE_INTERPOLATOR_MASK, 
     a.getBoolean(com.android.internal.R.styleable.AnimationSet_shareInterpolator 
      , true)); 

Bu açıkça bu boole belirtilmemişse, doğru varsayılan anlamına gelir:

AnimationSet kaynak kodu (xml) shareInterpolator için bir değer atamak için aşağıdaki satırı vardır, onaylamak için .


Çözüm

Sorununuzu çözmek için, sana bu "R.styleable.AnimationSet_shareInterpolator" kullanarak belirtmelidir varsayalım. Bu sadece sizin<set>elemanlarınaandroid:shareInterpolator="false"eklenmesi anlamına gelir

1
This xml works with both interpolators check this 


<?xml version="1.0" encoding="utf-8"?> 
<set xmlns:android="http://schemas.android.com/apk/res/android" 
     android:shareInterpolator="false"> 

    <translate 
     android:interpolator="@android:anim/overshoot_interpolator" 
     android:fromXDelta="100%" android:toXDelta="0%" 
     android:duration="500" /> 

    <scale 
     android:interpolator="@android:anim/accelerate_interpolator" 
     android:fromXScale="1.0" android:toXScale="0.6" 
     android:pivotX="0" 
     android:fromYScale="1.0" android:toYScale="1.0" 
     android:repeatCount="1" 
     android:repeatMode="reverse" 
     android:startOffset="500" 
     android:duration="1000" /> 
</set> 
İlgili konular