2012-01-27 20 views
9

Tôi có một bộ 10 hình ảnh và tôi muốn tạo một hoạt ảnh mà tôi vượt qua mờ dần giữa chúng. Tôi đã nhìn vào Drawable tích hợp để đạt được một điều như vậy, nhưng không may mắn về phần đó. Có các AnimationDrawable, mà chuyển đổi giữa các hình ảnh, nhưng nó không animate chuyển đổi. Có TransitionDrawable, mà mờ dần giữa hai hình ảnh, nhưng không quá hai.Thêm chuyển đổi vào một AnimationDrawable

Địa ngục.

Tôi đã tìm một số giải pháp trên Google, nhưng không may mắn về phần đó. Vì vậy, tôi đang suy nghĩ về việc thực hiện bản vẽ của riêng mình để đạt được một điều như vậy. Có bất kỳ của bạn có bất kỳ con trỏ?

Xin cảm ơn trước.

Trả lời

15

Không chắc chắn nếu bạn tìm thấy câu trả lời cho điều này, nhưng tôi đã có cùng một vấn đề và kết thúc xây dựng lớp học của riêng tôi dựa trên TransitionDrawable.

Cách sử dụng:

CyclicTransitionDrawable ctd = new CyclicTransitionDrawable(new Drawable[] { 
    drawable1, 
    drawable2, 
    drawable3, 
    ... 
}); 

imageView.setImageDrawable(ctd); 

ctd.startTransition(1000, 3000) // 1 second transition, 3 second pause between transitions. 

Mã cho CyclicTransitionDrawable là available on Github.

+0

Vâng, tôi thậm chí không nhớ những gì tôi đã làm :-) Nhưng giải pháp của bạn có vẻ tốt đẹp và sạch sẽ , hãy đánh dấu nó là câu trả lời! – Redwarp

+0

Có cách nào để làm cho nó chỉ đi cho một vòng lặp? – Andy

+0

Hiện tại không có cách nào để giới hạn số lượng vòng lặp. Mặc dù nó có thể được thêm vào, tôi nghĩ (từ bộ nhớ) bạn có thể sử dụng lớp TransitionDrawable ban đầu để đạt được điều đó. –

10

Vâng. Thời gian dài đã trôi qua và có thể bạn đã khắc phục vấn đề, nhưng bạn đã setEnterFaceDuration() cho AnimationDrawable. Ví dụ:

mBackgroundAnimation = new AnimationDrawable(); 
mBackgroundAnimation.addFrame(getResources().getDrawable(R.drawable.background1), 5000); 
// ... rest of the frames 
mBackgroundAnimation.addFrame(getResources().getDrawable(R.drawable.background6), 5000); 
mBackgroundAnimation.setEnterFadeDuration(1000); 
mBackgroundAnimation.setOneShot(false); 

Với mã này, bạn có thể dễ dàng di chuyển qua hình ảnh 1.N, mỗi hình ảnh vẫn là 5s (5000ms) với hoạt ảnh mờ dần. Bây giờ, những gì tôi làm là thiết lập nền của thư mục gốc của tôi RelativeLayout

mLayoutRoot.setBackground(mBackgroundAnimation); 
mLayoutRoot.post(new AnimationStarterThread()); 

Và lớp AnimationStarterThread

private class AnimationStarterThread implements Runnable { 
    public void run() { 
     if(mBackgroundAnimation != null) 
      mBackgroundAnimation.start(); 
    } 
} 
Các vấn đề liên quan