2010-10-11 41 views
37

Tôi đã vật lộn trong vài ngày về điều này, cuối cùng chỉ quyết định hỏi. Nó rất đơn giản, tôi đã bị thiếu một cái gì đó rất cơ bản.Android - Nhấp nháy hình ảnh bằng hoạt ảnh Alpha phai

Tôi có một trang bố cục XML có hình ảnh được xác định. Tôi có hai trang hoạt hình XML, một để thay đổi alpha từ 0 đến 1 và một từ 1 đến 0 để tạo hiệu ứng "nhấp nháy". Vì vậy, alphaAnimation được định nghĩa trong XML, tôi chỉ cần gọi nó.

Hình ảnh bật lên, nhưng không có hiệu ứng nhấp nháy lặp lại.

public class blinker extends Activity { 

    //create name of animation 
Animation myFadeInAnimation; 
Animation myFadeOutAnimation; 

/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.scanning_view); 

//grab the imageview and load the animations 
    ImageView myImageView = (ImageView) findViewById(R.id.blinkingView01); 
    Animation myFadeInAnimation = AnimationUtils.loadAnimation(null, R.anim.fade_in); 
    Animation myFadeOutAnimation = AnimationUtils.loadAnimation(null, R.anim.fade_out); 

//fade it in, and fade it out. 
    myImageView.startAnimation(myFadeInAnimation); 
    myImageView.startAnimation(myFadeOutAnimation); 
    } 
} 

Hai bố trí Animation XML trong nguồn Anim:

<?xml version="1.0" encoding="UTF-8"?> 
<set xmlns:android="http://schemas.android.com/apk/res/android"> 
    <alpha android:fromAlpha="0.0" 
    android:toAlpha="1.0" 
    android:interpolator="@android:anim/accelerate_interpolator" 
    android:duration="50" android:repeatCount="infinite"/> 
</set> 

Và khác:

<?xml version="1.0" encoding="UTF-8"?> 
<set xmlns:android="http://schemas.android.com/apk/res/android"> 
    <alpha android:fromAlpha="1.0" android:toAlpha="0.0" 
    android:interpolator="@android:anim/accelerate_interpolator" 
    android:duration="1000" android:repeatCount="infinite"/> 
</set> 
+0

bài viết mã XML của bạn. – Wroclai

+1

Xin chào Charlie, hãy yêu người đàn ông của bạn. :) Tôi đã chỉnh sửa bài đăng gốc, được thêm vào trong hai tệp XML (fade_in.xml và fade_out.xml) – Keith

Trả lời

27

Tại sao không sử dụng android:repeatMode="reverse"

+0

Vẫn còn vấn đề tương tự. Màn hình xuất hiện, nhưng không có hoạt ảnh. – Keith

+0

Tại sao tham số đầu tiên của bạn là null thay vì điều này trong: nimationUtils.loadAnimation (null, ...? – methodin

+0

đó là một lần lặp lại khác, tôi đã trải qua rất nhiều, bao gồm một viết lại hoàn chỉnh khác để tạo ảnh động. Điều này ". – Keith

85

Cách tốt nhất để tween phai:

ImageView myImageView = (ImageView) findViewById(R.id.imageView2); 
Animation myFadeInAnimation = AnimationUtils.loadAnimation(Splash.this, R.anim.tween); 
myImageView.startAnimation(myFadeInAnimation); 

trong res/anim/tạo tween.xml 1s tween của bạn bắt đầu opacity 0-1 và đảo ngược infinit ...

<?xml version="1.0" encoding="utf-8"?> 
<set xmlns:android="http://schemas.android.com/apk/res/android"> 
<alpha 
    android:fromAlpha="0.0" 
    android:toAlpha="1.0" 
    android:duration="1000" 
    android:repeatMode="reverse" 
    android:repeatCount="infinite" /> 
</set> 
+3

Nó làm việc cho tôi !! Tôi đã giữ từAlpha là 0,2 để khung nhìn không biến mất hoàn toàn. Cảm ơn Buchs, +1 vì điều này. – Shraddha

+0

Đối với tôi, nó chỉ lặp lại một lần: trong và ngoài. Sau đó, nó không có gì. – brainmurphy1

+2

@ brainmurphy1 có thể bạn đã quên 'android: repeatCount =" vô hạn "'. Số lần lặp lại cần phải dương hoặc vô hạn. –

12

Bạn có thể sử dụng hình ảnh động alpha dưới đây để thiết lập các hiệu ứng nhấp nháy với quan điểm trong android.

blinkanimation= new AlphaAnimation(1, 0); // Change alpha from fully visible to invisible 
blinkanimation.setDuration(300); // duration 
blinkanimation.setInterpolator(new LinearInterpolator()); // do not alter animation rate 
blinkanimation.setRepeatCount(3); // Repeat animation infinitely 
blinkanimation.setRepeatMode(Animation.REVERSE); 

Sau đó thêm các hình ảnh động để xem bạn như thế nào,

view.setAnimation(blinkanimation); 

hoặc

view.startAnimation(blinkanimation); 
+0

cách thay đổi thời lượng trong phương pháp này? – Hamid

+1

Thay đổi nó trong blinkanimation.setDuration (thời lượng của bạn); @Hamid – KarthikKPN

+0

LinearInterpolator là mặc định, không cần thiết phải đặt rõ ràng là – YTerle

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