View 的滑动处理(二)

本文详细介绍了CoordinatorLayout的Behavior机制,用于实现布局中View的交互。Behavior分为Layout-Based和Scroll-Based两类,前者如Anchoring,后者如滚动联动。文章通过实例解释了如何自定义Behavior,包括layoutDependsOn、onDependentViewChanged和onDependentViewRemoved等关键方法,并提到了NestedScrollingDemos项目作为示例参考。
摘要由CSDN通过智能技术生成

CoordinatorLayout.Behavior

CoordinatorLayout 根据 官方文档 的描述,它是一个“超级FrameLayout“,专门用来帮助实现布局中的View相互交互。我们只需要为布局里面的 Views 创建自定义的或者分配现有的 Behavior 即可。BehaviorMaterial Design 独一无二的核心,例如滑动抽屉和面板,滑动消失元素,和跟随其他空间移动的按钮等等。

我们先来看看 Behavior 是如何工作的,后面还会配上几个例子便于理解。

Behavior 用来表示同一个布局中2个或者2个以上的控件之间的交互。通常分为以下几类:

Layout-Based Behaviors:

先来看一个效果图:

在这里插入图片描述

当 snackbar 从底部出现的时候,FAB 会立即向上平移一个 SnackBar 的高度。

AnchoringLayout-Based Behaviors 的一种,比如我们将 FAB anchored to AppBarLayout,看下面的效果图(注意观察红色的类似短信图标的按钮):

在这里插入图片描述

可以看到 FAB 随着 AppBarLayout 在移动,而且最后还会消失。这种 anchored to 的行为,在 CoordinatorLayout 中对应着一个属性,我们下面会说到。

Scroll-Based Behaviors

还是看上面的图,这次不看 FAB,而是观察下面的长文本。TextView 本身是不可滚动的,所以它的外面有一层 NestedScrollView 包裹。

一个 CoordinatorLayout 中有两个可以滚动的控件,一个是 AppBarLayout,一个是 NestedScrollView 。通过效果图,可以看出,他们并没有产生冲突,而是将滑动联动起来了,我们向上滚动 NestedScrollView 的时候,会向将 AppBarLayout 往上推,推到顶部之后,NestedScrollView 才开始滚动,之间没有停顿,无缝衔接。

之所以能够产生这样的行为,是因为这两个控件都被分配了一个 Behavior。

@CoordinatorLayout.DefaultBehavior(AppBarLayout.Behavior.class)
public class AppBarLayout extends LinearLayout {
   
    <android.support.v4.widget.NestedScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_behavior="@string/appbar_scrolling_view_behavior"
        >

Implementing the Behaviors

介绍完了两类 Behaviors,接下来我们看看如何自定义一个 Behavior。

首先,我们的 Behavior 必须继承至 Coordinator.Behaviors<V>,V 就是需要这个Behavior 的控件的类型。比如我想给 TextView 指定一个 Behavior,那么 V 就是 TextView 类型。

然后,Coordinator.Behaviors<V> 有一些方法需要覆盖来达到我们想要的效果,其中有3个方法尤其重要(额,还有滚动相关的方法,与第一篇是以一样的就不介绍了)。

layoutDependsOn(…)

这个方法用来决定,当前 View 需要依赖哪个 View。比如你需要根据同一布局中的 ImageView 的位置来决定自己的位置,那么就可以这样写:

    override fun layoutDependsOn(parent: CoordinatorLayout, child
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值