2

J'essaie de faire en sorte que ma barre d'outils change de couleur en défilement sans pour autant l'écraser (donc je ne veux pas que sa hauteur change). Je veux que ce soit d'abord une couleur et ensuite elle changera en une autre lorsque vous faites défiler. Il devrait alors revenir à la couleur d'origine lorsque je reviens au sommet.Modification de la couleur de la barre d'outils sans défilement

J'ai été en mesure de changer la couleur sur le défilement mais seulement en conjonction avec le changement de hauteur. J'ai essayé de définir minHeight sur la barre d'outils, CollapsingToolbarLayout et AppBarLayout, mais pas de chance, malheureusement.

Je sais que je peux probablement le faire manuellement (animer la couleur sur le changement de défilement) mais je veux exclure le faire avec la bibliothèque de conception d'abord.

C'est ce que j'ai jusqu'à présent:

<?xml version="1.0" encoding="utf-8"?> 
<android.support.design.widget.CoordinatorLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:background="@color/app_secondary_darker"> 

    <android.support.design.widget.AppBarLayout 
     xmlns:android="http://schemas.android.com/apk/res/android" 
     xmlns:app="http://schemas.android.com/apk/res-auto" 
     android:id="@+id/appbar" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:minHeight="?attr/actionBarSize" 
     android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" 
     android:fitsSystemWindows="true"> 

     <android.support.design.widget.CollapsingToolbarLayout 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:minHeight="?attr/actionBarSize" 
      android:fitsSystemWindows="true" 
      app:contentScrim="@color/white" 
      app:layout_scrollFlags="scroll"> 

      <android.support.v7.widget.Toolbar 
       android:id="@+id/toolbar" 
       android:layout_width="match_parent" 
       android:layout_height="?attr/actionBarSize" 
       android:minHeight="?attr/actionBarSize" 
       app:popupTheme="@style/ThemeOverlay.AppCompat.Light" 
       app:layout_collapseMode="pin" /> 

     </android.support.design.widget.CollapsingToolbarLayout> 

    </android.support.design.widget.AppBarLayout> 

    <android.support.v4.widget.NestedScrollView 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     app:layout_behavior="@string/appbar_scrolling_view_behavior"> 

     <LinearLayout 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:orientation="vertical"> 

      <TextView 
       android:layout_width="match_parent" 
       android:layout_height="400dp" 
       android:text="Abc" 
       android:background="@color/grey_light"/> 

      <TextView 
       android:layout_width="match_parent" 
       android:layout_height="400dp" 
       android:text="Def" 
       android:background="@color/red_dark"/> 

     </LinearLayout> 

    </android.support.v4.widget.NestedScrollView> 

</android.support.design.widget.CoordinatorLayout> 

Merci à l'avance!

Répondre

0

Espérons que cela soit utile.

app_bar.addOnOffsetChangedListener { appBarLayout, verticalOffset -> 
    val collapsedPercent = -verticalOffset/appBarLayout.totalScrollRange.toFloat() 

    //仅在这 0.3的区间里交互 //这个值 在 (0,1]之间,可以自定义 
    //这里表示仅在收缩到仅剩百分比hotPercent的时候,才进行收缩 
    val hotPercent = 0.3F 

    val collapsedHotPercent = MathUtils.clamp(collapsedPercent/hotPercent + 1 - 1/hotPercent, 0F, 1F) 

    Log.d(TAG, "onCreate collapsedPercent:" + collapsedPercent) 

    tabs.apply { 
     val normalColorStart = ContextCompat.getColor(context, R.color.k6_main_tabs_normal_start) 
     val normalColorEnd = ContextCompat.getColor(context, R.color.k6_main_tabs_normal_end) 
     val selectedColorStart = ContextCompat.getColor(context, R.color.k6_main_tabs_selected_start) 
     val selectedColorEnd = ContextCompat.getColor(context, R.color.k6_main_tabs_selected_end) 

     val normalColor = ColorUtil.getColorOfDegradate(normalColorStart, normalColorEnd, collapsedHotPercent) 
     val selectedColor = ColorUtil.getColorOfDegradate(selectedColorStart, selectedColorEnd, collapsedHotPercent) 

     setTabTextColors(normalColor, selectedColor) 
     setSelectedTabIndicatorColor(selectedColor) 
    } 
}