State ListAnimatior 스크롤을 사용하여 Toolbar의 elevation 변경
6458 단어 Android
Overview
Toolbar 아래에 있는 ScrollView와 RecyclearView를 스크롤할 때 Toolbar의 그림자를 더하려고 할 때 설치합니다.
Toolbar의
StateListAnimator
와 ScrollView의 canScrollVertically()
를 사용하여 실현합니다.1. Object Animator 만들기
제작 상태가 selected로 변할 때 elevation을 변화시키는 ObjectAnimatior.
res/animator/toolbar_elevation.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_selected="true">
<objectAnimator
android:duration="200"
android:propertyName="elevation"
android:valueTo="4dp"
android:valueType="floatType" />
</item>
<item>
<objectAnimator
android:duration="200"
android:propertyName="elevation"
android:valueTo="0dp"
android:valueType="floatType" />
</item>
</selector>
2. Toolbar에서 Object Animator 설정
작성된 Object Animatior를 Toolbar에 설정합니다.
res/layout/{layout_name}.xml
<androidx.appcompat.widget.Toolbar
...
android:stateListAnimator="@animator/toolbar_elevation" />
3. 툴바 상태 변경
ScrollView/RecyclearView의 canscrollVertically () 값으로 Toolbar 상태를 변경합니다.
ActivityorFragment.kt
binding.scrollView.viewTreeObserver.addOnScrollChangedListener {
// -1をセットすると、スクロール位置が一番上の時のみtrueになる
isSelected = binding.scrollView.canScrollVertically(-1)
}
이렇게 스크롤하면 Toolbar의 선택 상태가 변경되고 elevation도 변경됩니다.DataBinding Tips
스타일과 DataBinding의 Custom Binding Adapter를 사용하여 공통화할 수도 있습니다.
res/values/styles.xml
<style name="Toolbar.NoShadow" parent="Widget.AppCompat.Toolbar">
<item name="android:elevation">0dp</item>
<item name="android:stateListAnimator">@animator/toolbar_elevation</item>
</style>
ToolbarBindingAdapters.kt@BindingAdapter("shadowAnimationScrollViewId")
fun Toolbar.setShadowAnimationScrollViewId(@IdRes scrollViewId: Int) {
val scrollView = this.rootView.findViewById<View>(scrollViewId)
if (scrollView is ScrollView) {
scrollView.viewTreeObserver.addOnScrollChangedListener {
isSelected = scrollView.canScrollVertically(-1)
}
}
}
layout/{layout}.xml<android.support.v7.widget.Toolbar
...
style="@style/Toolbar.NoShadow"
app:shadowAnimationScrollViewId="@{R.id.scroll}" />
<ScrollView
android:id="@+id/scroll"
android:layout_width="match_parent"
android:layout_height="match_parent">
...
</ScrollView>
Reference
이 문제에 관하여(State ListAnimatior 스크롤을 사용하여 Toolbar의 elevation 변경), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/konifar/items/4a5568b32f2ced664706텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)