自定义Behavior

Behavior是CoordinatorLayout的内部抽象类,用于实现子View之间的交互和联动效果。自定义Behavior可以简化原本在Activity中处理滚动事件的复杂逻辑,通过重写特定方法如layoutDependsOn(), onDependentViewChanged(), onStartNestScroll(), onNestPreScroll()等来实现各种动画效果。本文介绍了三个实例,包括上拉消失下拉显示、跟随ToolBar缩放以及支付宝首页折叠效果的实现。" 121599558,11514459,理解软件测试:定义、目的与原则,"['测试', '软件质量', '测试用例', '开发流程', '软件调试']
摘要由CSDN通过智能技术生成



Behavior简介

CoordinatorLayout是个很牛的布局容器,使用它可以很方面的实现很多效果,比如支付宝首页的折叠效果,知乎首页等等,Behavior是它的一个内部抽象类,声明Behavior属性的View可以和他它依赖的兄弟元素交互,当然,这些元素都必须是CoordinatorLayout的子元素。

what?

该类是CoordinatorLayout子View之间交互的插件,有了它CoordinatorLayout的子View就可以产生联动效果。比如一个子View跟随另一个子View的移动而移动,或者是缩放,透明度变换等。

why?

一般情况下,如果要实现子View,随着上拉消失,下拉出现,我们需要在Activity中监听滚动事件,在里边处理View的显示逻辑,这样就会导致Activity中代码量变大,滚动事件中的逻辑也会变的复杂,有了CoordinatorLayout.behavior,不需要监听滚动事件,只需要自定义一个Behavior的实现类,实现几个方法就可以达到相应的效果,不需要修改activity中的代码。

how?

Behavior是CoordinatorLayout的一个内部抽象类,里边的方法有很多,如果不是要实现特别复杂的功能,只需要实现1,2个方法就可以了。常见的有两种方式:

1. 如果要依赖于CoordinatorLayout中的某个子View实现某种变化,需要实现Behavior的layoutDependsOn()和onDependentViewChanged()方法,前者会在CoordinatorLayout中通过循环的方式,找到被依赖的View,返回true,表示找到了被依赖的View,后者在每次dependency的大小,位置变化的时候都会调用,可以在这里出child的变化逻辑。

 /**
     * 在CoordinatorLayout中通过循环遍历的方式找到被依赖的View
     *
     * @param parent     CoordinatorLayout
     * @param child      设置了该Behavior的View
     * @param dependency 被依赖的View
     * @return true 标识找到了被依赖的View
     */
    @Override
    public boolean layoutDependsOn(CoordinatorLayout parent, View child, View dependency) {
        //...
    }
    /**
     * 每次dependency的大小或位置有所变化的时候都会调用该方法
     *
     * @param parent
     * @param child
     * @param dependency
     * @return
     */
    @Override
    public boolean onDependentViewChanged(CoordinatorLayout parent, View child, View dependency) {
        //...
    }

2. 如果不需要依赖于任何子View,纯粹只是想要根据滑动距离,做一些操作,可以实现onStartNestScroll()和onNestPreScroll()。

onNestedPreScroll(CoordinatorLayout coordinatorLayout, V child, View target, int dx, int dy, int[] consumed, int type)

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值