小学CoordinatorLayout的交互

  • snapMargins

不知道

  • exitUntilCollapsed

上拉的时候,这个View也会跟着滑动,直到变成折叠后的模样

这些属性可以直接在xml中使用,也可在在代码中通过 setScrollFlags(int Flag) 来加。

了解之后,有没有发现这个属性很嗨吊。我们平时使用的App都会有这种交互。

我们来在AppLayout里面加一张图片。然后改变一下属性:

<android.support.design.widget.AppBarLayout

android:id=“@+id/appbar”

android:layout_width=“match_parent”

android:layout_height=“wrap_content”

android:theme=“@style/ThemeOverlay.AppCompat.Dark.ActionBar”>

<ImageView

android:layout_width=“match_parent”

android:layout_height=“200dp”

android:scaleType=“fitXY”

android:src=“@drawable/ic_jojo3”

app:layout_scrollFlags=“scroll|enterAlways” />

效果如下

在这里插入图片描述

发现这个没有折叠效果,还是有点不是很好,那么我们来看下和它有关的CollapsingToolbarLayout

4、CollapsingToolbarLayout


它是一个包装工具栏的Layout,它可以做到折叠标题、内容装饰等功能。

它通常做为AppBarLayout的子View,为其子View设置了一个关键属性: collaspseMode,它有这么几个值

  • pin

固定视图,也就是说,不论这么滑动,它都一定在,它就是折叠的样子

  • parallax

这滑动的时候,这个view会出现 视觉特差的情况,什么是视觉特差?

就是 出现的时候是渐渐出来, 消失的时候渐渐消失的,不像刚刚那样的图片消失的很僵硬。

  • none

不会显示出折叠效果。

这里直接拿来用:

<android.support.design.widget.AppBarLayout

android:id=“@+id/appbar”

android:layout_width=“match_parent”

android:layout_height=“wrap_content”

android:theme=“@style/ThemeOverlay.AppCompat.Dark.ActionBar”>

<android.support.design.widget.CollapsingToolbarLayout

android:layout_width=“match_parent”

android:layout_height=“200dp”

android:fitsSystemWindows=“true”

app:contentScrim=“?attr/colorPrimary”

app:expandedTitleMarginEnd=“64dp”

app:expandedTitleMarginStart=“48dp”

app:layout_scrollFlags=“scroll|exitUntilCollapsed”>

<ImageView

android:layout_width=“match_parent”

android:layout_height=“match_parent”

android:scaleType=“centerCrop”

android:src=“@drawable/ic_jojo3”

app:layout_collapseMode=“parallax” />

<android.support.v7.widget.Toolbar

android:id=“@+id/toolbar”

android:layout_width=“match_parent”

android:layout_height=“?attr/actionBarSize”

app:layout_collapseMode=“pin”

app:popupTheme=“@style/ThemeOverlay.AppCompat.Light”>

<TextView

android:layout_width=“wrap_content”

android:layout_height=“wrap_content”

android:text=“阿强”

android:textColor=“#ffffff”

android:textSize=“20sp” />

</android.support.v7.widget.Toolbar>

</android.support.design.widget.CollapsingToolbarLayout>

<RelativeLayout

android:layout_width=“match_parent”

android:layout_height=“?attr/actionBarSize”

android:background=“?attr/colorPrimary”

app:popupTheme=“@style/ThemeOverlay.AppCompat.Light”>

<TextView

android:layout_width=“wrap_content”

android:layout_height=“wrap_content”

android:layout_centerVertical=“true”

android:layout_marginStart=“20dp”

android:text=“我是 盖尔·里卡·德沃”

android:textColor=“#ffffff”

android:textSize=“15sp” />

</android.support.design.widget.AppBarLayout>

效果如下:

在这里插入图片描述

图片的消失就没有那么的僵硬,阿强所在的ToolBarLayout因为是pin的关系,已经被固定在了上面。

其实看到这里,大家都肯定已经明白了,我这个效果,不就是模仿朋友圈的交互效果吗?

我们在RecyclerView定义了它的behavior,这个Behavior其实也很关键,它是 CoordinatorLayout的精髓所在,所以学习CoordinatorLayout,不自定义一个behavior,那等于白学。

5、Behavior


我们给除了 AppBarLayout的控件添加了app:layout_behavior="@string/appbar_scrolling_view_behavior"

当然除了这个值还有别的值,但这个用的比较多,和AppBarLayout配合的也是最好的。它的效果就是配合AppBarLayout来滑动。

因为Behavior是一个抽象类,所以我们可以自定义Behavior来达成我们想要的交互效果,我们来看下其样子(必须是CoordinatorLayout的Behavior)因为有很多控件的包都有自己的Behavior - -!!

public abstract static class Behavior {

}

它的泛型是继承自View的控件,也就是说只要是控件,都能实现这些效果。我们来看下可以选择重写的方法:

  • onInterceptTouchEvent()

是否拦截触摸事件

  • onTouchEvent()

处理触摸事件

  • layoutDependsOn()

确定使用Behavior的View要依赖的View类型

  • onDependentViewChanged()

当被依赖的View状态改变时的回调

  • onDependentViewRemoved()

当被依赖的View被移除时回调

  • onMeasureChild()

测量使用Behavior的View尺寸

  • onLayoutChild

确定使用Behavior的View的位置

  • onStartNestedScroll()

滑动开始,确定Behavior是否要监听此次事件

  • onStopNestedScroll()

嵌套滑动结束

  • onNestedScroll()

滑动进行中,要监听的子 View的滑动事件已经被消费

  • onNestedPreScroll()

嵌套滑动进行中,要监听的子 View将要滑动,滑动事件即将被消费(但最终被谁消费,可以通过代码控制)

  • onNestedFling()

要监听的子 View在快速滑动中

  • onNestedPreFling()

要监听的子View即将快速滑动

学习了这些,我们来自定义一个Behavior

通常Behavior分为两种情况。

  • 某个View依赖另一个View,监听器位置、尺寸等状态的变化

  • 某个View监听CoordinatorLayout内实现了NestedScrollingChild接口的子View的滑动状态变化

我们来实现一个:

public class MyBehavior extends CoordinatorLayout.Behavior {

// 列表顶部和title底部重合时,列表的滑动距离。

private float deltaY;

public MyBehavior() {

}

public MyBehavior(Context context, AttributeSet attrs) {

super(context, attrs);

}

//是否使用在Recycler上

@Override

public boolean layoutDependsOn(@NonNull CoordinatorLayout parent, @NonNull View child, @NonNull View dependency) {

return dependency instanceof RecyclerView;

}

@Override

public boolean onDependentViewChanged(@NonNull CoordinatorLayout parent, @NonNull View child, @NonNull View dependency) {

if (deltaY == 0) {

deltaY = dependency.getY() - child.getHeight();

}

float dy = dependency.getY() - child.getHeight();

dy = dy < 0 ? 0 : dy;

float y = -(dy / deltaY) * child.getHeight();

float alpha = 1 - (dy / deltaY);

child.setAlpha(alpha);

child.setTranslationY(y);

return true;

}

}

上面的 layoutDependsOn和 onDependentViewChanged 是一定要重写的。

child是我们要使用Behavior的View,dependency是依赖的View,我们把以来的View设置成RcyclerView。

然后在我们滑动RecyclerView的时候,来让Child也移动,xml如下:

<?xml version="1.0" encoding="utf-8"?>

<android.support.design.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:id=“@+id/main_content”

android:layout_width=“match_parent”

android:layout_height=“match_parent”

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

img

img

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Android)

Android核心知识点

面试成功其实是必然的,因为我做足了充分的准备工作,包括刷题啊,看一些Android核心的知识点,看一些面试的博客吸取大家面试的一些经验。

下面这份PDF是我翻阅了差不多3个月左右一些Android大博主的博客从他们那里取其精华去其糟泊所整理出来的一些Android的核心知识点,全部都是精华中的精华,我能面试到现在2-2资深开发人员跟我整理的这本Android核心知识点有密不可分的关系,在这里本着共赢的心态分享给各位朋友。

不管是Android基础还是Java基础以及常见的数据结构,这些是无原则地必须要熟练掌握的,尤其是非计算机专业的同学,面试官一上来肯定是问你基础,要是基础表现不好很容易被扣上基础不扎实的帽子,常见的就那些,只要你平时认真思考过基本上面试是没太大问题的。

最后为了帮助大家深刻理解Android相关知识点的原理以及面试相关知识,这里放上我搜集整理的2019-2021BAT 面试真题解析,我把大厂面试中常被问到的技术点整理成了PDF,包知识脉络 + 诸多细节。

节省大家在网上搜索资料的时间来学习,也可以分享给身边好友一起学习。

《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门即可获取!

这本Android核心知识点有密不可分的关系,在这里本着共赢的心态分享给各位朋友。

[外链图片转存中…(img-klhkVJi4-1711960246380)]

不管是Android基础还是Java基础以及常见的数据结构,这些是无原则地必须要熟练掌握的,尤其是非计算机专业的同学,面试官一上来肯定是问你基础,要是基础表现不好很容易被扣上基础不扎实的帽子,常见的就那些,只要你平时认真思考过基本上面试是没太大问题的。

最后为了帮助大家深刻理解Android相关知识点的原理以及面试相关知识,这里放上我搜集整理的2019-2021BAT 面试真题解析,我把大厂面试中常被问到的技术点整理成了PDF,包知识脉络 + 诸多细节。

节省大家在网上搜索资料的时间来学习,也可以分享给身边好友一起学习。

《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门即可获取!
  • 15
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值