美文网首页知识图谱
Android kotlin CoordinatorLayout

Android kotlin CoordinatorLayout

作者: 水天滑稽天照八野滑稽石 | 来源:发表于2020-08-03 01:32 被阅读0次

Android kotlin CoordinatorLayout使用笔记(二)
Android kotlin CoordinatorLayout使用笔记(三)
Android kotlin CoordinatorLayout使用笔记(四)

前言

最近项目刚好要用到这个东西,就去搜了下用法,出来的文章一言难尽,基本上是抄来抄去,而且也不容易看懂,所以就自己来总结下使用

简介

CoordinatorLayout (协调布局)就是用来实现折叠效果的, 一般配合AppBarLayout和CollapsingToolbarLayout来用,常见的如外卖点餐页面,知乎页面等(就是上滑顶部菜单折叠变成别的布局)


使用

想要协调布局,首先要先套一层CoordinatorLayout (这个可以配合behavior来协调其他view的变化)
这里先简单演示下如何协调其他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,这个就是实现跟随效果的behavior

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


    /**
     *  使用该Behavior的View要监听哪个类型的View的状态变化
     *  @param parent CoordinatorLayout
     *  @param child 使用该Behavior的View
     *  @param dependency dependency代表要监听的View
     */
    override fun layoutDependsOn(parent: CoordinatorLayout, child: View, dependency: View): Boolean {
        //这儿我们要监听DownMoveView
        return dependency is DownMoveView
    }

    /**
     * 当被监听的View状态变化时会调用该方法
     * 参数同上一个方法一致
     * child -> View2
     * dependency -> view1
     * 使View2永远在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
    }
}

结语

最基本的CoordinatorLayout就到这里了,下一遍会讲解进阶用法

相关文章

网友评论

    本文标题:Android kotlin CoordinatorLayout

    本文链接:https://www.haomeiwen.com/subject/cdzmrktx.html