2011年8月20日

Android動畫系列 – GONE無法使用動畫解決方法


相信大家都有嘗試過,在為元件設定動畫的時候會使用Visiableinvisiable來操作,這樣子可以很檢的的實現動畫效果,但是有時候並不是只是要讓元件不可見而已,而真正的將他從畫面移除,也就是GONE屬性,這時候大家有沒有發現設置GONE的元件,即使設定了動畫效果但是卻看不到,原因很簡單,因為它在動畫開始前就先消失了。

此篇文章在這裡找到一個解決辦法,也就是為我們的動畫註冊監聽器,來監測目前動畫的狀態。


參考以下程式碼:
Animation alphaAnim = AnimationUtils.loadAnimation(getApplicationContext(), android.R.anim.fade_out);
alphaAnim.setAnimationListener(new AnimationListener() {
     public void onAnimationStart(Animation arg0) {
     }
     public void onAnimationRepeat(Animation arg0) {
     }
     public void onAnimationEnd(Animation arg0) {
         mDrawPaneLayout.setVisibility(View.GONE);
     }
});

mLayout.setAnimation(alphaAnim);
mLayout.setVisibility(View.INVISIBLE);


首先我們宣告一個動畫,該動畫使用android內建的fade_out效果,再來我們為這個動畫類別註冊一個監聽動畫的監聽器,這邊是重點,我們在onAnimationEnd寫入將元件從畫面移除的程式碼,而外部依然使用INVISIBLE屬性來達到元件隱藏,這時候我們會看到動畫撥放,當動畫撥放結束,這時候會被監聽到,此時會執行GONE將元件移出。

雖然這是個很簡單的思維,但相信對大家會有幫助。

沒有留言:

ShareThis