2010-11-06 41 views
5

Tôi gặp sự cố thường gặp khi thực hiện hoạt ảnh có thể vẽ trong Android. Tôi muốn bắt đầu một hoạt ảnh khi Activity bắt đầu, trong phương thức onCreate(), nhưng như nhiều người đã tìm thấy, nó không hoạt động.AnimationDrawable trong vấn đề Android

Tôi đã đọc rất nhiều lời khuyên nhưng không có gì có vẻ phù hợp với tôi. Nếu tôi bắt đầu hoạt ảnh trong onClick() nó hoạt động, nó yêu cầu đầu vào của người dùng, không bắt đầu ngay lập tức.

Tôi đã thử bắt đầu nó trong một chuỗi riêng biệt trong onCreate() nhưng điều đó cũng không hoạt động. Tôi đọc ở đây:

http://code.google.com/p/android/issues/detail?id=1818

nhưng không ai trong số những lời khuyên làm việc, hoặc tôi không thể hiểu được nó.

Ai đó có thể trợ giúp?

Trả lời

0

Theo liên kết bạn đã cung cấp, bạn phải bắt đầu hoạt ảnh trong một chuỗi riêng biệt. Trong Java bạn làm điều đó bằng cách thực hiện các giao diện Runnable và bắt đầu nó với

Thread t = new Thread(new MyRunnable()); // MyRunnable inherits Runnable 
t.start(); 

bạn cũng có thể viết mã như thế này

new Thread(new Runnable() { 
    public void run(){ 
     // some code that runs outside the ui thread. 
    } 
}).start(); 

nếu bạn không muốn thực hiện một lớp học hoàn toàn mới. Sau này tất nhiên không phải là khá, nhưng nếu bạn đang thực hiện một dự án nhỏ, nó có thể được tốt đẹp để biết về.

Bạn đã thử theo cách này hay bạn đã bắt đầu chuỗi của mình theo cách khác chưa?

Vui lòng đọc Painless Threading để xem xét khả năng bạn phải thực hiện các hành động bên ngoài chuỗi ui và cách đăng các phương thức chạy trên chuỗi ui từ chủ đề của riêng bạn.


Edit: Sau khi xem xét các liên kết mà bạn đăng tải, bạn phải chờ một thời gian trước khi bắt đầu chủ đề của bạn, có lẽ cho đến khi onCreate hoàn tất. Theo số the flowchart on this page, bạn sẽ có thể bắt đầu hoạt ảnh của mình sau, ví dụ như trong cuộc gọi onResume. Bạn đã thử bắt đầu nó bằng một phương thức gọi là onCreate chưa?

Bạn chỉ nên tạo những thứ trong onCreate và "bắt đầu" chúng trong onStart hoặc onResume.

3

tôi đã phải đối mặt với vấn đề tương tự, và chuyển sang trọng onWindowFocusChanged() thay vì phương thức onCreate() và onResume():

public void onWindowFocusChanged(boolean hasFocus) 
{ 
    if (hasFocus) 
    { 
     animation.start(); 
    } 
    else 
    { 
     animation.stop(); 
    } 
} 
+0

này hoạt động, nhưng tôi đoán nó sẽ không cung cấp cho hầu hết mọi người đủ kiểm soát để làm những gì họ muốn; ví dụ để bắt đầu một hoạt ảnh trước khi một nhiệm vụ bắt đầu và dừng nó sau đó. –

+0

điều này không hoạt động, nhưng tôi thấy rằng nếu tôi gọi 'animation.start()' trước 'onWindowFocusChanged (true)' và sau đó lại gọi 'hoạt hình.start() 'từ bên trong' onWindowFocusChanged (true) 'thì hoạt ảnh sẽ không bắt đầu! Vì vậy, những gì tôi phải làm là theo dõi trạng thái giao diện người dùng. Vì vậy, bên trong 'if (hasFocus) 'của Vaiden, tôi đặt một biến thành viên' isVisible = true; 'và tất cả' animation.start() 'trước tiên kiểm tra' isVisible == true'. Đó là một * lớn * PITA khi tự khởi động các hoạt ảnh khác nhau. –

1

Tôi nghĩ rằng bạn phải bắt đầu các hình ảnh động sau khi khởi tạo các quan điểm trong câu hỏi hoàn tất. Bạn sẽ có thể làm điều gì đó như thế này:

final ImageView tweenImage = (ImageView) findViewById(R.id.imageView1); 
tweenImage.setBackgroundResource(R.anim.cubicfacetween);  
tweenImage.post(new Runnable() { 
    @Override 
    public void run() { 
     AnimationDrawable frameAnimation = 
      (AnimationDrawable) tweenImage.getBackground(); 
     frameAnimation.start(); 
    } 
} 

Đối với thiết src trong imageView

((ImageView)findViewById(R.id.no_network_icon)).post(new Runnable() { 
      @Override 
      public void run() { 
       AnimationDrawable drawable = (AnimationDrawable) ((ImageView)findViewById(R.id.no_network_icon)).getDrawable(); 
       drawable.start(); 
      } 
     }); 
+0

Tính năng này hoạt động trên Nexus 4, Nexus 5 và cũ của Sony Erricson chạy 2.3 Nhưng nó không hoạt động trên HTC One V chạy 4.03 ... Bất kỳ ý tưởng nào? Chế độ xem được làm động đơn giản là không vẽ ... Nếu tôi thay thế hình động bằng một màu thì chế độ xem sẽ xuất hiện tốt. – Stephen

+0

đăng đoạn mã. –

+0

vấn đề được giải quyết bằng cách phân biệt giữa thiết lập Animation.xml trong thuộc tính nền hoặc thuộc tính src của ImageView. –

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