2013-03-09 16 views
5

Tôi có một tập hợp của hai hình ảnh động, cả hình ảnh động chạy cùng nhau sử dụng xen vượtAndroid Có thể sử dụng các bộ nội suy đồng thời không?

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

Tôi muốn translate hình ảnh động để vượt qua, và scale hoạt hình để tăng tốc.
tôi đã cố gắng để làm điều này, nhưng nó không hoạt động:

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

Dường như nếu chỉ có một người xen vào có thể hoạt động tại một thời gian nhất định cho tất cả các hình ảnh động được thực hiện trên một đối tượng duy nhất.

Trả lời

3

Tôi đặt chia các hoạt ảnh và đặt một hình ảnh trên ImageView và hình kia trên RelativeLayout có chứa chế độ xem hình ảnh.

Translator

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

Và mã nguồn để xúi giục nó:

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

Tôi nghĩ rằng nó trông khá tốt. Tôi không chắc bạn đang hy vọng điều gì.

9

Đây chỉ là công việc đoán. Tôi nhớ rằng một trong các nhà thầu của AnimationSet có thể lấy một đối số, cụ thể là shareInterpolator.

Đánh giá theo tên của thông số, điều này có thể nên được đặt thành false trong trường hợp của bạn. Ngay bây giờ, nó sẽ được sử dụng mặc định "giá trị". Giá trị mặc định này rất có thể là đúng vì hoạt ảnh của bạn không có các bộ nội suy khác nhau mặc dù bạn đã chỉ định một giá trị khác nhau cho mỗi loại.

Để xác nhận, mã nguồn của AnimationSet có dòng sau để gán các giá trị cho shareInterpolator (từ xml):

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

Điều này có nghĩa rõ ràng rằng nếu boolean này không được xác định, nó sẽ mặc định là true .


Giải pháp

Để khắc phục vấn đề của bạn, tôi nghĩ bạn nên xác định nó sử dụng này "R.styleable.AnimationSet_shareInterpolator". Đây chỉ đơn thuần có nghĩa thêmandroid:shareInterpolator="false"để<set>yếu tố của bạn

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> 
Các vấn đề liên quan