所以我试图将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)