Android“ValueAnimator”动画持续时间仅适用一次

时间:2017-11-01 20:02:14

标签: java android cordova animation statusbar

所以我试图将StatusBar颜色从“#F5F5F5”变为“#616161”,并且当颜色设置为“#616161”时,我想每当我感觉到“#F5F5F5”喜欢。为了做到这一点,我创建了一个名为tintStatusBar(String toColor)的函数,其编码如下:

private void tintStatusBar(String toColor) {

  final Window window = cordova.getActivity().getWindow();

  // If going Dark then we start Light
  if(toColor == "#616161"){
      statusBarFromColor = Color.parseColor("#F5F5F5");
  }

  // If going Light then we start Dark
  if(toColor == "#F5F5F5"){
      statusBarFromColor = Color.parseColor("#616161");
  }

  // Desired final color.
  statusBarToColor = Color.parseColor(toColor);

  ValueAnimator colorAnimation = ValueAnimator.ofObject(new ArgbEvaluator(), statusBarFromColor, statusBarToColor);
  colorAnimation.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
      @Override
      public void onAnimationUpdate(ValueAnimator animator) {
          int color = (Integer) animator.getAnimatedValue();

          if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
              window.setStatusBarColor(color);
          }
      }
  });

  colorAnimation.setDuration(10000);
  colorAnimation.start();
}

调用tintStatusBar(#616161)在#F5F5F5到#616161的10秒内逐渐改变颜色,正如预期的那样。

但是,如果我调用tintStatusBar(#F5F5F5)(在第一次调用并且动画结束后),颜色将立即改变。奇怪的是,如果我再次呼叫tintStatusBar(#616161),它将按预期工作。

因此动画是单向的,它只适用于#F5F5F5到#616161。请记住,这是我的第一个Cordova插件,谷歌搜索没有返回任何与我的问题相关的内容,所以我真的不知道如何解决这个问题。

提前致谢。

(注意:我将持续时间设置为10秒只是为了确保呼叫之间存在差异,它应该是0.3秒,即便如此我也能感受到差异)

(注2:我的设备有Android 7.1,App最低SDK是API Level 21,即Lollipop)

0 个答案:

没有答案