2013-02-12 25 views
20

Vì vậy, Id muốn xoay một số lần xem tất cả cùng một lúc, tất cả đều sử dụng cùng thông số xoay. Vấn đề là vì một lý do nào đó, hành động quay khác nhau đối với phần tử thứ hai. Rõ ràng điều này đã làm với các đối tượng hoạt hình thực sự thay đổi trạng thái ở giữa hai dòng mã. Rõ ràng là tôi chỉ có thể tạo ra một đối tượng Animation riêng biệt và áp dụng nó, nhưng tôi cảm thấy như có một cách dễ dàng hơn (Tôi có khoảng 15 lượt xem)Áp dụng một hoạt ảnh cho nhiều chế độ xem cùng một lúc

Xoay chỉ xem đầu tiên một cách chính xác:

Animation rotateAnim = AnimationUtils.loadAnimation(this, R.anim.rotationtoportrait); 
target.startAnimation(rotateAnim); 
lightBtn.startAnimation(rotateAnim); 

Xoay cả hai một cách chính xác

Animation rotateAnim = AnimationUtils.loadAnimation(this, R.anim.rotationtoportrait); 
Animation rotateAnim2 = AnimationUtils.loadAnimation(this, R.anim.rotationtoportrait); 
target.startAnimation(rotateAnim); 
lightBtn.startAnimation(rotateAnim2); 

XML:

<?xml version="1.0" encoding="utf-8"?> 
<rotate 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:fromDegrees="-90" 
    android:toDegrees="0" 
    android:pivotX="50%" 
    android:pivotY="50%" 
    android:duration="500" android:fillAfter="true"> 

Một nyone có ý tưởng nào không?

+1

Cố gắng sử dụng API Animation mới (ví NineOldAndroids sử dụng ngược tương thích). Ngoài ra, tôi khuyên bạn nên xem video này: http://www.youtube.com/watch?v=_UWXqFBF86U – Leandros

+0

Yêu thích video! Nhưng API mới nào, theo như tôi có thể nói đây là những gì anh chàng trong video đã làm? (Cuối cùng ít nhất) – Jameo

+1

Video sai, xin lỗi. ;) http://www.youtube.com/watch?v=3UbJhmkeSig – Leandros

Trả lời

5

Vì vậy, tôi đoán đây chỉ là không thể, vì vậy tôi đã tạo ra một phương pháp helper để chỉ áp dụng các hình ảnh động tương tự vào một danh sách các quan điểm:

public void doRotations(ArrayList<View> views, int start, int end, int xprop, float xscale, int yprop, float yscale, int duration, Boolean fillAfter){ 

    for(int i = 0; i < views.size(); i++){ 
     RotateAnimation temp = new RotateAnimation(start, end, xprop, xscale, yprop, yscale); 
     temp.setDuration(duration); 
     temp.setFillAfter(fillAfter); 
     views.get(i).startAnimation(temp); 
    } 
} 

Chắc chắn là một hack, nhưng tôi đoán thats tất cả tôi m có thể làm ngay bây giờ

+0

Điều này thực sự chạy các hình ảnh động song song, NHƯNG bạn có thể thấy một sự chậm trễ nhỏ beteen các hình ảnh động nếu bạn nhìn kỹ (kể từ khi bạn đang kích hoạt các hình ảnh động squentially sau khi tất cả). – Mercury

7

làm điều đó như thế này:

ObjectAnimator anim = ObjectAnimator.ofFloat(view, "y", 100f); 
arrayListObjectAnimators.add(anim); 

ObjectAnimator anim1 = ObjectAnimator.ofFloat(view, "x", 0f); 
arrayListObjectAnimators.add(anim1); 

ObjectAnimator[] objectAnimators = arrayListObjectAnimators.toArray(new ObjectAnimator[arrayListObjectAnimators.size()]); 
AnimatorSet animSetXY = new AnimatorSet(); 
animSetXY.playTogether(objectAnimators); 
animSetXY.duration(1000); 
animSetXY.start(); 
+3

Điều này không trả lời câu hỏi, Nếu tôi đúng, bạn đang áp dụng 2 hoạt ảnh cho cùng một chế độ xem. Bài đăng gốc muốn áp dụng cùng một hoạt ảnh cho 2 lượt xem –

Các vấn đề liên quan