2013-07-12 31 views
9

Có cách nào đơn giản để lặp lại Android AnimatorSet (vô hạn) hay không. Tôi có thể thiết lập một AnimationListener và khởi động lại animatorSet bằng cách gọi start() một lần nữa?Lặp lại AnimatorSet

Bộ Animator của tôi chứa hai Ảnh động được phát tuần tự. Vì vậy, nếu tôi đặt chế độ lặp lại của cả hai hình động đơn lẻ để lặp lại, so với chế độ lặp lại đầu tiên sẽ được lặp lại trong khi lần chạy thứ hai chạy, phải không?

Trả lời

0

Trong khuôn khổ của tôi - khung hoạt ảnh là nguồn gây đau, đặc biệt nếu bạn muốn hỗ trợ 2.x. Tôi thường gặp vấn đề với các bộ cố gắng làm mọi thứ phức tạp hơnKết nối theo dõi với AnimationListener loại "trình phát". Tôi theo dõi hoạt hình nào tôi chơi (như int v.v.) và sau đó trên onAnimationEnd Tôi bắt đầu một hoạt ảnh khác theo thứ tự. Bằng cách đó tôi có thể dễ dàng "kịch bản" trình tự của tôi, và không bận tâm khuôn khổ bị hỏng.

+0

Hm, tôi chưa bao giờ có một vấn đề như vậy. Tuy nhiên, bạn đã làm gì trong Animation onAnimationEnd() để lặp lại toàn bộ hoạt ảnh. Bạn có thể chỉ cần bắt đầu hoạt ảnh đầu tiên để lặp lại toàn bộ quy trình hoạt ảnh không? – sockeqwe

+0

tôi bắt đầu một cái đầu tiên, zeroing biến của tôi –

11

Có một câu trả lời cho hai câu hỏi đầu tiên

Có một cách đơn giản để lặp lại một AnimatorSet Android (vô hạn)? Tôi có thể thiết lập một AnimationListener và khởi động lại animatorSet bằng cách gọi start() một lần nữa?

Vâng, đó là:

mAnimationSet.addListener(new AnimatorListenerAdapter() { 

    private boolean mCanceled; 

    @Override 
    public void onAnimationStart(Animator animation) { 
    mCanceled = false; 
    } 

    @Override 
    public void onAnimationCancel(Animator animation) { 
    mCanceled = true; 
    } 

    @Override 
    public void onAnimationEnd(Animator animation) { 
    if (!mCanceled) { 
     animation.start(); 
    } 
    } 

}); 
mAnimationSet.start(); 

Câu trả lời cho câu hỏi thứ ba, là không. Hoạt ảnh đầu tiên sẽ được lặp lại và sau tất cả các lần lặp lại, hoạt ảnh thành công sẽ được bắt đầu.

+2

AnimatorSet và AnimationSet khác nhau. – Anton

-3

Làm thế nào về điều này?

@Override 
public void onAnimationEnd(Animator animation) { 
    if (!mCanceled) { 
     animation.reset(); //<- added. 
     animation.start(); 
    } 
} 
+1

Không có phương thức 'reset()' cho 'Animator'. –

20

đặt chế độ lặp lại của đối tượng hoạt hình của trẻ em và đếm;

objectAnimator.setRepeatCount(ObjectAnimator.INFINITE); 
objectAnimator.setRepeatMode(ObjectAnimator.RESTART/REVERSE...); 

Điều này sẽ không thể dừng hoặc hủy do một lỗi khác.

rõ ràng, tôi không phải là một fan hâm mộ của vô số cách mà bạn có thể làm động vật trong Android, và tất cả đều thất bại bạn theo cách này hay cách khác. Hy vọng điều này sẽ giúp người khác.

-1

Vì vậy, không có tùy chọn nào ở trên phù hợp.

Nếu bạn sử dụng:

@Override 
    public void onAnimationEnd(Animator animation) { 
    if (!mCanceled) { 
     animation.start(); 
    } 
    } 

bạn sẽ kết thúc nhận Stackoverflow ngoại lệ đôi khi.

Điều tốt nhất là để làm một cái gì đó như:

Thread t = new Thread(new Runnable() { 
      @Override 
      public void run() { 
       while (true && getActivity() != null) { 
        getActivity().runOnUiThread(new Runnable() { 
         @Override 
         public void run() { 
          set3.start(); 
         } 
        }); 
        SystemClock.sleep(1200); 
       } 
      } 
     }); 
     t.start();