Android自定义Behavior
生活随笔
收集整理的這篇文章主要介紹了
Android自定义Behavior
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
先上效果圖:
Behavior是CoordinatorLayout的一個(gè)泛型抽象內(nèi)部類(lèi),所以給子view添加layout_behavior屬性是來(lái)自于它。
實(shí)現(xiàn)過(guò)程:
在CoordinatorLayout父控件中,滾動(dòng)NestedScrollView,使AppBarLayout也隨之顯示隱藏,通過(guò)我們的自定義behavior,監(jiān)聽(tīng)AppBarLayout的位置,來(lái)對(duì)底部菜單欄的位置高度作相應(yīng)的改變。
github代碼直通車(chē)
布局文件代碼:
?
<?xml version="1.0" encoding="utf-8"?> <androidx.coordinatorlayout.widget.CoordinatorLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"xmlns:app="http://schemas.android.com/apk/res-auto"app:layout_constraintTop_toTopOf="parent"app:layout_constraintBottom_toTopOf="@id/llMenu"xmlns:android="http://schemas.android.com/apk/res/android"><com.google.android.material.appbar.AppBarLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"><androidx.appcompat.widget.Toolbarandroid:layout_width="match_parent"android:layout_height="wrap_content"app:layout_scrollFlags="scroll|enterAlways"></androidx.appcompat.widget.Toolbar></com.google.android.material.appbar.AppBarLayout><androidx.core.widget.NestedScrollViewandroid:layout_width="match_parent"android:layout_height="match_parent"><LinearLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><ImageViewandroid:layout_width="match_parent"android:layout_height="200dp"android:scaleType="centerCrop"android:background="@mipmap/pic1"/><ImageViewandroid:layout_width="match_parent"android:layout_height="200dp"android:scaleType="centerCrop"android:background="@mipmap/pic2"/><ImageViewandroid:layout_width="match_parent"android:layout_height="200dp"android:scaleType="centerCrop"android:background="@mipmap/pic1"/><ImageViewandroid:layout_width="match_parent"android:layout_height="200dp"android:scaleType="centerCrop"android:background="@mipmap/pic2"/><ImageViewandroid:layout_width="match_parent"android:layout_height="200dp"android:scaleType="centerCrop"android:background="@mipmap/pic1"/><ImageViewandroid:layout_width="match_parent"android:layout_height="200dp"android:scaleType="centerCrop"android:background="@mipmap/pic2"/></LinearLayout></androidx.core.widget.NestedScrollView><LinearLayoutandroid:id="@+id/llMenu"android:layout_width="match_parent"android:layout_height="48dp"android:layout_gravity="bottom"android:background="#fff"app:layout_constraintBottom_toBottomOf="parent"android:orientation="horizontal"app:layout_behavior=".MyBehavior"><TextViewandroid:layout_width="0dp"android:layout_weight="1"android:layout_height="match_parent"android:gravity="center"android:textSize="16sp"android:text="首頁(yè)"/><TextViewandroid:layout_width="0dp"android:layout_weight="1"android:layout_height="match_parent"android:gravity="center"android:textSize="16sp"android:text="推薦"/><TextViewandroid:layout_width="0dp"android:layout_weight="1"android:layout_height="match_parent"android:gravity="center"android:textSize="16sp"android:text="我的"/></LinearLayout> </androidx.coordinatorlayout.widget.CoordinatorLayout>自定義behavior:
?
public class MyBehavior extends CoordinatorLayout.Behavior<View> {public MyBehavior(Context context, AttributeSet attrs) {super(context, attrs);}@Overridepublic boolean layoutDependsOn(@NonNull CoordinatorLayout parent, @NonNull View child, @NonNull View dependency) {return dependency instanceof AppBarLayout; //讓AppBarLayout為dependency}@Overridepublic boolean onDependentViewChanged(@NonNull CoordinatorLayout parent, @NonNull View child, @NonNull View dependency) {//獲取依據(jù)的view的高度百分比f(wàn)loat heightRatio = dependency.getY()/dependency.getHeight();child.setTranslationY(-child.getHeight()*heightRatio);return true;} }這里一定要寫(xiě)上帶參數(shù)的構(gòu)造方法,因?yàn)閏oordinatorlayout是根據(jù)反射(所以是包名.類(lèi)名路徑)獲取這個(gè)behavior。
總結(jié)
以上是生活随笔為你收集整理的Android自定义Behavior的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: hive 的 left semi joi
- 下一篇: 专网视频会议系统设备连接图拓扑图