為了更好的說明Android動畫的淡入淡出效果,這里以一個場景為例: 界面上有兩個View 控件,兩個View交替顯示,當一個View淡入顯示,另一個View淡出不可見。
我們把當前要顯示的View叫showView, 要隱藏不可見的view叫hideView。
final View showView = findViewById(***) final View hideView = findViewById(***)
首先說淡入顯示,既然要顯示,那么View要設置為可見,要實現淡入的效果,就需要將透明度先設置為0
showView.setAlpha(0f);
showView.setVisibility(View.VISIBLE);
接下來就要調用showView.animate()方法來實現動畫效果,設置最終的透明度為1。就可以達到不可見->模糊->完全顯示
showView.animate() .alpha(1f) .setDuration(5000) .setListener(null);
setDuration是設置動畫的持續時間,這里設置的是5秒。 setListener這里先緩一緩,最后我會說明這個方法的作用。
這樣showView的淡入效果就實現了,但是同時也必須在同一時間來完成hideView的淡出隱藏,否則兩個view就重疊了。
知道如何實現淡入,也就知道如何實現淡出了 - 將透明度由1變到0,最后將hideView設為不可見(在onAnimationEnd事件中設置), 調用hideView.animate()來實現動畫效果。就可以達到顯示->模糊->完全不可見
hideView.animate() .alpha(0f) .setDuration(mShortAnimationDuration) .setListener(new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator animation) { hideView.setVisibility(View.GONE); } });
好,目前為止,淡入淡出的效果已經實現,但是相信有細心的童鞋會發現如下細節
1 對於showView, 是先調用showView.setVisibility(View.VISIBLE)設置為可見, 然后才調用showView.animate()
對於hideView, 是先調用 hideView.animate(),最后在onAnimationEnd事件中調用hideView.setVisibility(View.GONE);設置為不可見
2 showView為什么要調用setListener(null), 這跟我文章開頭提到的場景有關,因為我們要實現的是兩個View交替淡入淡出顯示,所以當前的showView就是上一次的hideView,而hideView是設置了listener了,並且實現的是設置view為不可見,所以必須清掉。