2011-10-07 72 views
28

Tôi phải làm động một bộ đếm thời gian đếm ngược và tôi đang làm nó bằng cách làm hoạt hình nền của một ImageView sử dụng AnimationDrawable (mỗi hình ảnh có các lát theo vòng tròn loại bỏ). Vấn đề là người dùng có khả năng tạm dừng hoạt ảnh này, vì vậy tôi phải tải lại hoạt ảnh nhưng sau đó vấn đề sẽ xuất hiện. Tôi đã thử thiết lập các hình ảnh động để null, thiết lập nền của ImageView để null, thiết lập khả năng hiển thị của hình ảnh động, nhưng thực tế không có gì giúp, bởi vì số khung vẫn giữ nguyên. Tôi phải tìm một cách giải quyết để xóa tất cả các khung hình và thêm các khung hình mới hoặc để đặt lại toàn bộ hoạt ảnh về trạng thái mặc định.Làm thế nào để thiết lập lại AnimationDrawable

Bước 1 - khởi tạo các hình ảnh động (bắt đầu từ chỉ số khung là 0)

timerView.setBackgroundResource(R.drawable.timer_switch); 
timerAnimation = (AnimationDrawable)timerView.getBackground(); 

System.out.println("Number of frames: " + timerAnimation.getNumberOfFrames()); 

for (int frameIndex = startingFrameIndex; frameIndex < 60; frameIndex++) { 
    if (frameIndex < 10) { 
     uri = "drawable/timer_0000" + frameIndex; 
    } else { 
     uri = "drawable/timer_000" + frameIndex; 
    } 

    imageResourceId = getResources().getIdentifier(uri, null, getPackageName()); 
    timerAnimation.addFrame(getResources().getDrawable(imageResourceId), timerImageFrameDuration); 
} 

Bước 2 - đây là một phần khó khăn mà tôi không biết phải làm gì. Những điều tôi đã thử:

timerAnimation.stop(); 
timerAnimation.setCallback(null); 
timerAnimation.setVisibility(true, false); 
timerAnimation = null; 

Bước 3 - sau khi gọi bước 2 Tôi gọi lại bước 1, nhưng Sys.out vẫn hiển thị 60 là số khung hiện tại. (chỉ mục bắt đầu ở đây được đặt thành khung ẩn cuối cùng khi nhấn nút tạm dừng.)

Bất kỳ ý tưởng nào đều được hoan nghênh.

Cảm ơn

+0

thể ViewCompat.jumpDrawablesToCurrentState giúp đỡ: http://developer.android. com/reference/android/support/v4/view/ViewCompat.html # jumpDrawablesToCurrentState (android.view.View)? –

Trả lời

12

Tôi đã gặp sự cố tương tự khi dừng hoạt ảnh sẽ dừng trên khung hiện tại. Tôi muốn nó hoạt động như iOS, nơi dừng lại sẽ quay trở lại khung hình đầu tiên. Giải pháp này phù hợp với tôi:

((AnimationDrawable)(someButton.getBackground())).stop(); 
someButton.setBackgroundDrawable(null); 
someButton.setBackgroundResource(R.drawable.animation); 

Điều này đầu tiên dừng lại (có thể không cần thiết). Sau đó, nó sẽ giết hoạt ảnh nền. Cuối cùng, nó tái tạo nền.

+7

Câu trả lời của Tigger phải là câu trả lời được chấp nhận. –

-2

android.view.animation.Animation.reset() doesnt work?

+2

đó là một AnimationDrawable không phải là Hoạt ảnh, vì vậy đó không phải là một lựa chọn –

2

Một giải pháp khác có thể là có cùng hình ảnh cho khung hình đầu tiên và khung hình cuối cùng và thực hiện các thao tác sau thay vì gọi phương thức stop().

((AnimationDrawable)(someButton.getBackground())).setOneShot(true); 

nếu có ai xem xét thêm nữa. Ngoài ra còn có một phương thức gọi là setVisible (boolean visible, boolean restart). Tuy nhiên, điều đó không làm việc cho bản thân tôi.

1

Bạn có thể thử public boolean setVisible (boolean visible, boolean restart) và nó sẽ phát hoạt ảnh một lần. Ví dụ:

animationDrawable.setVisible(false, true); 
79

này sẽ gửi (AnimationDrawable) timerAnimation vào frame đầu tiên càng sớm càng stop() đã được gọi là:

timerAnimation.stop(); 
timerAnimation.selectDrawable(0); 
+10

IMO, giải pháp này tốt hơn và ít tốn kém hơn câu trả lời được chấp nhận. –

+1

+1, nhà phát triển vui lòng xem tại đây. 'stop()' thực hiện thủ thuật. –

+0

Đây là câu trả lời đúng ... – legomind

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