Android的阿尔法animation淡入淡出延迟
我想做一个非常简单的alphaanimation,但我找不到一个有效的方法。
这个想法是在视图上执行这个animation:
- 1秒的0到1的alpha
- 在1秒保持5秒钟
- 从1秒到1秒的alpha
- 在0保持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秒。为了达到这个目的:
-
setDuration(1000)
(持续1秒) -
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。