我们好,我是似曾相识2022。不喜欢唱跳篮球,但对杰伦的Rap情有独钟。

今天给我们分享一个平时在滑动页面经常遇到的作用:滑动过程动态修正状态栏色彩。咱们废话不多说,有图有真相,直接上作用图:

Android:监听滑动控件实现状态栏颜色切换

看到作用是不是感觉很熟悉,相对而言如果页面顶部有背景色,而滑动到底部的时候背景色变为白色或许其他色彩的时候,状态栏色彩不跟从切换色彩有可能会显得难看备至。因此有了上图的作用,其实便是简单的完成了状态栏色彩切换的功能,作用看起来不至于那么尴尬。

首要,咱们需求分析,其间需求用到哪些东西呢?

  • 沉溺式状态栏
  • 滑动组件监听

关于沉浸式状态栏,这儿推荐运用immersionbar,一款非常不错的轮子。咱们只需求将mannifests中主体装备为NoActionBar类型,再依据文档装备好状态栏色彩等特点即可快速得到沉溺式作用:

<style name="Theme.MyApplication" parent="Theme.AppCompat.Light.NoActionBar">
//根底设置
 ImmersionBar.with(this)            
      .navigationBarColor(R.color.color_bg)
      .statusBarDarkFont(true, 0.2f)
      .autoStatusBarDarkModeEnable(true, 0.2f)//启用主动依据StatusBar色彩调整深色形式与亮式
      .autoNavigationBarDarkModeEnable(true, 0.2f)//启用主动依据NavigationBar色彩调整深色式
      .init()
//状态栏view
status_bar_view?.let {
            ImmersionBar.setStatusBarView(this, it)
        } 
//xml中状态栏        
<View
   android:id="@+id/status_bar_view"
   android:layout_width="match_parent"
   android:layout_height="0dp"
   android:background="#b8bfff" />

关于滑动监听,咱们都知道滑动控件有个监听滑动的办法OnScrollChangeListener,其间返回了Y轴滑动间隔的参数。那么,咱们可以依据这个参数进行对应的条件判别以达到动态修正状态栏的色彩。

scroll?.setOnScrollChangeListener { _, _, scrollY, _, _ ->
    if (scrollY > linTop!!.height) {
        if (!isChange) {
            status_bar_view?.setBackgroundColor(
                Color.parseColor("#ffffff")
            )
            isChange = true
        }
    } else {
        if (isChange) {
            status_bar_view?.setBackgroundColor(
                Color.parseColor("#b8bfff")
            )
            isChange = false
        }
    }
}

这儿判别滑动间隔达到紫色视图结尾时修正状态栏色彩。由于是在回调办法中,所以这儿一旦滑动就在不断触发,所以给了一个私有特点进行不必要的操作,仅当状态改动时且滑动条件满意时才能修正状态栏。当然在这个办法内我们可以发挥自己的想象力做出更多的新花样来。

注意:

  • 滑动监听的这个办法只能在设备6.0及以上才能运用。
  • 需求初始化滑动控件的默认方位,xml中将焦点设置到其父容器中,避免滑动控件不再初始方位。
//初始化方位
scroll?.smoothScrollTo(0, 0)
//xml中设置父view焦点
android:focusable="true"
android:focusableInTouchMode="true"

好了,以上便是滑动控件中完成状态栏切换的简单完成,希望对我们有所帮助。