当前位置: 首页 > 知识库问答 >
问题:

Android-如何使用crossfade动画更改状态栏颜色[复制]

韩佐
2023-03-14

我想用crossfade动画实现颜色更改状态栏,如下所示。我能知道怎么做吗?

状态栏颜色更改动画:

谢谢!

编辑(2018年7月7日)-来吧,伙计们,这不是复制品

不管怎样,最后我找到了一个解决方案,使用ValueAnimator和Argb评估器。

val mColorAnimation = ValueAnimator.ofObject(ArgbEvaluator(), firstColor, secondColor, thirdColor, fourthColor) 

mColorAnimation.duration = (pageCount - 1) * 10000000000L

mColorAnimation.addUpdateListener { animator ->
    val color = animator.animatedValue as Int

    // change status, navigation, and action bar color
    window.statusBarColor = color
    window.navigationBarColor = color
    supportActionBar?.setBackgroundDrawable(ColorDrawable(color))
}

main_viewpager.addOnPageChangeListener(object : ViewPager.OnPageChangeListener{
    override fun onPageScrollStateChanged(state: Int) { /* unused */ }
    override fun onPageSelected(position: Int) { /* unused */ }

    override fun onPageScrolled(position: Int, positionOffset: Float, positionOffsetPixels: Int) {
        mColorAnimation.currentPlayTime = ((positionOffset + position) * 10000000000).toLong()
    }
})

共有2个答案

孙凌龙
2023-03-14

这就是如何以编程方式更改状态栏的颜色。现在,您可以在ViewPagerlistener中更改状态栏的颜色。

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
    Window window = getWindow();
    window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
    window.setStatusBarColor(Color.RED);
}
邓俊英
2023-03-14

github上已经有一个库,可以演示如何通过圆形显示效果对工具栏和状态栏的颜色进行动画更改。看看这个。

这是代码片段

public class MainActivity extends Activity {

    private View mRevealView;
    private View mRevealBackgroundView;
    private Toolbar mToolbar;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mToolbar = (Toolbar) findViewById(R.id.appbar);
        mToolbar.setTitle(getString(R.string.app_name));

        mRevealView = findViewById(R.id.reveal);
        mRevealBackgroundView = findViewById(R.id.revealBackground);

        ToggleButton toggleButton = (ToggleButton) findViewById(R.id.toggleButton);
        toggleButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                boolean on = ((ToggleButton) v).isChecked();

                if (on) {
                    animateAppAndStatusBar(R.color.primary, R.color.accent);
                } else {
                    animateAppAndStatusBar(R.color.accent, R.color.primary);
                }
            }
        });

        setActionBar(mToolbar);
    }

    private void animateAppAndStatusBar(int fromColor, final int toColor) {
        Animator animator = ViewAnimationUtils.createCircularReveal(
                mRevealView,
                mToolbar.getWidth() / 2,
                mToolbar.getHeight() / 2, 0,
                mToolbar.getWidth() / 2);

        animator.addListener(new AnimatorListenerAdapter() {
            @Override
            public void onAnimationStart(Animator animation) {
                mRevealView.setBackgroundColor(getResources().getColor(toColor));
            }
        });

        mRevealBackgroundView.setBackgroundColor(getResources().getColor(fromColor));
        animator.setStartDelay(200);
        animator.setDuration(125);
        animator.start();
        mRevealView.setVisibility(View.VISIBLE);
    }
}

希望有帮助。

 类似资料:
  • 我已经改变了我的应用程序的状态栏颜色为白色后,这个状态栏图标是不可见的。

  • 晚上好,伙计们。 我有个问题。我已经心神不定好长时间了。这里我有两个AScreen和BScreen屏幕。对于AScreen,我想要一个带有黑色图标的白色状态栏。对于BScreen,一个红色的状态栏,图标为白色。如何做到这一点?? 当我在屏幕A上时,我使用Flatter_statusbarcolo状态栏为红色,我导航到屏幕B状态栏为白色,但当我返回屏幕A时,状态栏保持白色(屏幕B的颜色)

  • 使用Xcode开发iOS时如何更改iPhone状态栏的颜色?

  • 问题内容: 我正在尝试将状态栏的颜色更改为蓝色或其他某种颜色。 这可能吗,或者Apple不允许吗? 问题答案: 注意:此解决方案在iOS 13及更高版本下失败。 Plist中的第一个设置为 输出屏幕截图如下

  • 如果你认为它重复了一些其他的问题,那么我应该让你现在我已经尝试了3,4页的谷歌搜索,也实现了他们。

  • 在我的一个活动中,我使用更改了工具栏的颜色。但在使用的5.0设备上,颜色是活动主题中的的颜色,所以我有两种非常不同的颜色,看起来不太好。 我意识到在5.0中可以使用,但没有这个功能。 所以我的问题是在5.0中,如何用更改状态栏颜色?