Android的阿尔法animation淡入淡出延迟

我想做一个非常简单的alphaanimation,但我找不到一个有效的方法。

这个想法是在视图上执行这个animation:

  1. 1秒的0到1的alpha
  2. 在1秒保持5秒钟
  3. 从1秒到1秒的alpha
  4. 在0保持5秒。
  5. 从1开始。

我试图用AnimationSet来实现:

AnimationSet animationSet = new AnimationSet(true); Animation animation1 = new AnimationUtils.loadAnimation(this, android.R.anim.fade_in); animation1.setDuration(1000); Animation animation2 = new AnimationUtils.loadAnimation(this, android.R.anim.fade_out); animation2.setDuration(1000); animation2.setStartOffset(5000); Animation animation3 = new AlphaAnimation(0.0f, 0.0f); animation3.setDuration(4000) animation3.setStartOffset(6000); animationSet.add(animation1); animationSet.add(animation2); animationSet.add(animation3); 

等等..

但它接触到第三个animation搞乱所有的alphaanimation,我认为这会导致Androidpipe理这种types的animation的方式内​​部不一致。

任何想法?

谢谢。

好的记住这两点来解决这个问题


  • 如果我想在animation持续时间为1秒的5秒后将1.0f to 0.0f设置1.0f to 0.0f ,则最终是1秒钟的animation,暂停时间为5秒。

    为了达到这个目的:

    1. setDuration(1000) (持续1秒)
    2. setStartOffset(5000) (5秒后开始)

  • 你只需要2个animation,将永远循环。

    1. 0.0f to 1.0f ,暂停5秒,持续1秒

    2. 1.0f to 0.0f ,5秒暂停和1秒持续时间


这里是代码:

  animation1 = new AlphaAnimation(0.0f, 1.0f); animation1.setDuration(1000); animation1.setStartOffset(5000); animation2 = new AlphaAnimation(1.0f, 0.0f); animation2.setDuration(1000); animation2.setStartOffset(5000); textView.startAnimation(animation1); 

但是为了永久循环,我将使用AnimationListener因为repeatCount是buggy:

  animation1 = new AlphaAnimation(0.0f, 1.0f); animation1.setDuration(1000); animation1.setStartOffset(5000); //animation1 AnimationListener animation1.setAnimationListener(new AnimationListener(){ @Override public void onAnimationEnd(Animation arg0) { // start animation2 when animation1 ends (continue) textView.startAnimation(animation2); } @Override public void onAnimationRepeat(Animation arg0) { // TODO Auto-generated method stub } @Override public void onAnimationStart(Animation arg0) { // TODO Auto-generated method stub } }); animation2 = new AlphaAnimation(1.0f, 0.0f); animation2.setDuration(1000); animation2.setStartOffset(5000); //animation2 AnimationListener animation2.setAnimationListener(new AnimationListener(){ @Override public void onAnimationEnd(Animation arg0) { // start animation1 when animation2 ends (repeat) textView.startAnimation(animation1); } @Override public void onAnimationRepeat(Animation arg0) { // TODO Auto-generated method stub } @Override public void onAnimationStart(Animation arg0) { // TODO Auto-generated method stub } }); textView.startAnimation(animation1); 

有一个更简单的解决scheme。

让我们假设你的视图处于状态GONE。 为了使其可见性更具活力:

 yourView.setVisibility(View.VISIBLE); yourView.animate().alpha(1).setDuration(300); 

通过相同的方式,您可以添加animation侦听器。

这也适用于缩放和翻译animation。