2012-06-29 44 views
13

Có cách nào để tạm ngưng Animation trong nửa giây không?Sự chậm trễ trong hoạt ảnh (TranslateAnimation)

Tôi đang cố gắng tạo hoạt ảnh vô hạn bằng cách sử dụng API TranslateAnimation. Vì vậy, tôi sử dụng RepeatCountInfinite. Tôi cũng nhận thấy rằng có một phương pháp setStartOffset(...) bao gồm trường hợp khi tôi muốn có sự chậm trễ trong việc khởi động hoạt ảnh. Tuy nhiên, tôi không thể tìm thấy một cách để có một sự chậm trễ trước khi mỗi 'khởi động lại'. Vì hoạt ảnh sẽ diễn ra vô số lần, mỗi khi hoạt ảnh khởi động lại, tôi cần phải hoãn lại.

Bất kỳ ý tưởng nào?

Cảm ơn !!

+0

Có thể thử đặt nó vào một chủ đề sẽ bắt đầu hoạt ảnh, ngủ x khoảng thời gian, sau đó bắt đầu hoạt ảnh, thay vì sử dụng vô hạn? – Guardanis

Trả lời

11

đây là một ví dụ:

Đầu tiên bố trí (main.xml) với một hình ảnh chúng tôi muốn phát hình động:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical" > 

    <ImageView 
     android:id="@+id/imageView1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:src="@drawable/ic_launcher" /> 

</LinearLayout> 

một Tiếp theo là hình ảnh động. Đặt trong res/anim và được gọi là anim_img.xml. Tệp chứa hoạt ảnh dịch với android: startOffset = "500" (tính bằng millisec). Điều này sẽ đặt độ lệch, được sử dụng mỗi lần hoạt ảnh bắt đầu:

<?xml version="1.0" encoding="utf-8"?> 
<set> 

    <translate 
     xmlns:android="http://schemas.android.com/apk/res/android" 
     android:duration="1000" 
     android:fromXDelta="0%" 
     android:fromYDelta="0%" 
     android:toXDelta="0%" 
     android:toYDelta="100%" 
     android:zAdjustment="top" 
     android:repeatCount="infinite" 
     android:startOffset="500"/> 

</set> 

Và hoạt động cuối cùng nhưng không kém phần quan trọng. Mà bắt đầu các hoạt hình:

public class StackOverflowActivity extends Activity { 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     ImageView iv_icon = (ImageView) findViewById(R.id.imageView1); 

     Animation a = AnimationUtils.loadAnimation(this, R.anim.anim_img); 
     a.setFillAfter(true); 
     a.reset(); 

     iv_icon.startAnimation(a); 
    } 
} 

Chúc mừng, Paul

+0

Cảm ơn! Tôi sẽ thử điều đó và sẽ báo cáo lại liệu phương pháp này có hiệu quả hay không ... – ymotov

9

Để đạt được một tạm dừng mili giây giữa mỗi x restart:

myAnimation.setAnimationListener(new AnimationListener(){ 

     @Override 
     public void onAnimationStart(Animation arg0) { 
     } 
     @Override 
     public void onAnimationEnd(Animation animation) { 
     } 

     @Override 
     public void onAnimationRepeat(Animation animation) { 
      myAnimation.setStartOffset(x); 
     } 

    }); 
+0

Thật tuyệt vời, cảm ơn! – nurxyz

0

myanimation.setStartDelay (int);

+0

Bạn tìm phương pháp đó ở đâu? – hrules6872

+1

@h_rules có lẽ anh ta có nghĩa là 'setStartOffset (long)'. –

+2

Nó phải được gọi trên màn hình. 'view.animate(). setDuration (1000) .setStartDelay (500);' – Yurets

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