Android动画之淡入淡出

为了更好的说明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为不可见,所以必须清掉。

原文地址:https://www.cnblogs.com/lcyhjx/p/3473836.html