2013-05-28 166 views
31

我需要顯示淡入淡出的圖像按鈕(以及出入淡出等...) 透明色可以使用setAlpha設置,但我怎樣才能淡入淡出?我的意思是我不能在另一個線程上做,因爲你需要在UI線程上做這樣的事情,對吧?Android:淡入淡出視圖

我想它可以用動畫來完成,但我沒有發現任何東西,因爲我沒有與任何動畫體驗,真的不知道該怎麼尋找...

其實我真正想要的是褪色一個圖像和另一個出來,但我想最簡單的方法是將第一個圖像按鈕放置在第二個圖像下方,然後淡入第二個圖像。還是有更簡單的方法來做到這一點?

+0

你可以使用動畫,並創建您的阿爾法過渡動畫'XML'文件,然後設置它到'ImageButton' – kabuto178

回答

56

這是我現在使用的解決方案,即在API級別低於12的工作原理:

AlphaAnimation anim = new AlphaAnimation(1.0f, 0.0f); 
anim.setDuration(1000); 
anim.setRepeatCount(NUM_REPEATS); 
anim.setRepeatMode(Animation.REVERSE); 
button.startAnimation(anim); 
13

這是我們在我們的項目中使用的動畫。微調是一個視圖,所以你可以用你的imageview來改變它。所以確實在彼此之上有兩個圖像,一個是看不見的。這是我們如何做到的。希望能幫助到你。

spinner.setVisibility(View.VISIBLE); 
    spinner.setAlpha(0); 

    spinner.animate().setDuration(200).alpha(1).setListener(new AnimatorListenerAdapter() { 
     @Override 
     public void onAnimationEnd(Animator animation) { 
      spinner.setVisibility(View.VISIBLE); 
     } 
    }); 

    infoActivityContent.animate().setDuration(200).alpha(0).setListener(new AnimatorListenerAdapter() { 
     @Override 
     public void onAnimationEnd(Animator animation) { 
      infoActivityContent.setVisibility(View.GONE); 

     mainPresenter.logout(); 
     } 
    }); 
+0

這也需要API級別12,我需要8個。無論如何,我會使用它,直到我找到別的東西。如果我想無限地淡入淡出(這意味着我需要從淡出動畫結束偵聽器中開始淡入淡出),它最終會導致內存溢出嗎? – DominicM

+1

沒有,通常不應該是一個問題。它們都在不同的線程上運行,一旦第一個完成所有分配的內存將被釋放。 –

-1

實現動畫類(您可以通過XML加載它或動態創建它)。

然後,您可以通過API setAnimation(動畫動畫)對其進行設置。

0

您可以演變成你的第二個像你的第一個圖像的幾個連續幀和背部,然後將它們定義爲animation-list和的onCreate

button_frames.xml啓動動畫:

<?xml version="1.0" encoding="utf-8"?> 
     <animation-list xmlns:android="http://schemas.android.com/apk/res/android" > 
     <item android:drawable="@drawable/frame1" android:duration="100" /> 
     <item android:drawable="@drawable/frame2" android:duration="100" /> 
        .... 

佈局:

<ImageView android:id="@+id/button" 
     android:background="@drawable/button_frames"/> 

的OnCreate:

ImageView button= (ImageView)findViewById(R.id.button); 
    mAnimation = (AnimationDrawable) animationView.getBackground(); 
    button.postDelayed(new Runnable() { 
     public void run() { 
     mAnimation.start(); 
     } 
    }, 100); 
4

您必須閱讀Crossfading Two ViewsAndroid developers。在本教程中解釋瞭如何做你想做的事情。

+1

這看起來非常好,但它需要API等級12,我需要等級8(我忘了提及...) – DominicM