Android kotlin CoordinatorLayout使用筆記(一)

Android kotlin CoordinatorLayout使用筆記(二)
Android kotlin CoordinatorLayout使用筆記(三)
Android kotlin CoordinatorLayout使用筆記(四)

前言

最近項(xiàng)目剛好要用到這個東西,就去搜了下用法,出來的文章一言難盡,基本上是抄來抄去,而且也不容易看懂,所以就自己來總結(jié)下使用

簡介

CoordinatorLayout (協(xié)調(diào)布局)就是用來實(shí)現(xiàn)折疊效果的, 一般配合AppBarLayout和CollapsingToolbarLayout來用,常見的如外賣點(diǎn)餐頁面,知乎頁面等(就是上滑頂部菜單折疊變成別的布局)


使用

想要協(xié)調(diào)布局,首先要先套一層CoordinatorLayout (這個可以配合behavior來協(xié)調(diào)其他view的變化)
這里先簡單演示下如何協(xié)調(diào)其他View,一個View跟隨另一個View

這兒會使用到一個自定義View(DownMoveView):拖拽可移動的View,具體可以看這個:
自定義拖曳跟隨手指移動View

這里會在CoordinatorLayout 里面使用2個View,一個DownMoveView,一個普通的view
讓普通的View跟隨著DownMoveView一塊移動,并且位置在DownMoveView正下方100px

<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

        <com.example.rbq.DownMoveView
            android:id="@+id/view1"
            android:layout_width="100dp"
            android:layout_height="100dp"
            android:background="@mipmap/ic_launcher" />

        <View
            android:id="@+id/view2"
            android:layout_width="100dp"
            android:layout_height="100dp"
            android:layout_marginTop="120dp"
            android:background="@drawable/ic_map_person"
            app:layout_behavior=".MyBehavior"/>

</androidx.coordinatorlayout.widget.CoordinatorLayout>

View1就是我們自定義的DownMoveView,View2則指定了一個behavior,這個就是實(shí)現(xiàn)跟隨效果的behavior

class MyBehavior @JvmOverloads constructor(context: Context,
                                           attrs: AttributeSet? = null) : CoordinatorLayout.Behavior<View>(context, attrs) {


    /**
     *  使用該Behavior的View要監(jiān)聽哪個類型的View的狀態(tài)變化
     *  @param parent CoordinatorLayout
     *  @param child 使用該Behavior的View
     *  @param dependency dependency代表要監(jiān)聽的View
     */
    override fun layoutDependsOn(parent: CoordinatorLayout, child: View, dependency: View): Boolean {
        //這兒我們要監(jiān)聽DownMoveView
        return dependency is DownMoveView
    }

    /**
     * 當(dāng)被監(jiān)聽的View狀態(tài)變化時會調(diào)用該方法
     * 參數(shù)同上一個方法一致
     * child -> View2
     * dependency -> view1
     * 使View2永遠(yuǎn)在View1下方100px位置
     */
    override fun onDependentViewChanged(parent: CoordinatorLayout, child: View, dependency: View): Boolean {
        val view2Param = child.layoutParams as CoordinatorLayout.LayoutParams
        view2Param.topMargin = dependency.top + dependency.height + 100
        view2Param.leftMargin = dependency.left
        child.layoutParams = view2Param
        return true
    }
}

結(jié)語

最基本的CoordinatorLayout就到這里了,下一遍會講解進(jìn)階用法

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容