小试牛刀,x新控件介绍

作者: 医学科学  发布:2019-10-01

手摸手教你写 Slack 的 Loading 动画

四步实现:
画布旋转及线条变化动画(Canvas Rotate Line Change)
画布旋转动画(Canvas Rotate)
画布旋转圆圈变化动画(Canvas Rotate Circle Change)
线条变化动画(Line Change)

自定义 View—风车的绘制和动画


仿华为天气中风车的实现,可以设定风速用来调节风车的转速快慢

自定义动画效果的 Drawable


实现动画效果的 Drawable,可以和一般的 Drawable 一样使用,对于相同的动画效果比自定义 View 更轻量级

详解 View 的基础概念


在 Android 中, View 作为最重要的显示控件, 概念与参数较多. 所有的显示控件都继承于 View, 包含 ViewGroup 也是继承于 View. 本文含有 Demo, 欢迎 Follow 我的 GitHub: https://github.com/SpikeKing

Android 自定义 View——圆形进度条式按钮


Android 自定义 view 技能继续 get, 快上车!

仿照 [饿了么] 下单按钮的自定义 View


就当学习自定义 View 和动画

贝塞尔曲线之购物车动画效果


question 贝塞尔曲线是什么? 贝塞尔曲线可以做什么? 怎么做? what is it? 贝塞尔曲线在百度定义是贝塞尔曲线(Bézier curve),又称贝兹曲线或贝济埃曲线,是应用于二维图形应用程序的数学曲线。 do what? 贝塞尔曲线根据不同点实现不同动态效果:…

十分钟彻底弄明白 View 事件分发机制


Android 开发,触控无处不在。对于一些 不咋看源码的同学来说,多少对这块都会有一些疑惑。View 事件的分发机制,不仅在做业务需求中会碰到这些问题,在一些面试笔试题中也常有人问,可谓是老生常谈了。我以前也看过很多人写的这方面的文章,不是说的太啰嗦就是太模糊,还有一些在细节上写的也有争议,故再次重新整理一下这块内容,十分钟让你搞明白 View 事件的分发机制。

这交互炸了:饿了么是怎么让Image变成详情页的


晚上叫外卖,打开饿了么,发现推了一个版本,更新以后,点开了个鸡腿,哇,交互炫炸了。 本文同步自wing的地方酒馆 不过还是有槽点。我是无意中才发现可以左右滑动的。这。。。你不告诉我,我怎么知道左右可以滑。 https://github.com/githubwing/ZoomHe…

Material Design 系列,自定义 Behavior 之上滑显示返回顶部按钮


有时候我们的页面内容过长的时候,滑动到页面底部用户再滑动到顶部很麻烦,Android 不像 iOS 可以点击 statusBar 回到顶部,一般都是双击 Toolbar/ActionBar 或者在底部放一个按钮。今天我们就利用自定义 Behavior 来实现这个回到顶部按钮的渐显的动画效果。如果对我的 Behavior 博文感兴趣的,那么看官可以在文章顶部找到我其它关于 Behavior 的博文。

Android属性动画详解(一),属性动画基本用法


Hello,大家好,今天又来装逼了,装逼也上瘾啊,最近公司不是特别忙,我想这也就是我出来装逼的最好时机吧!额,,哈哈,进入正题。如有疑问欢迎留言,如有谬误欢迎批评指正。 在Tween动画的讨论中,我们提到在Android中动画可以分为三类:①帧动画②Tween(补间动画)③Pr…

自定义 ViewGroup - 自动换行 Layout


自定义控件——自动换行 Layout

让你的 App 提升一个档次-酷炫自定义控件


作者还在维护的 android UI 相关开源库集合,大部分是 custom view,部分 UI 设计相关

WaveLoadingView - 波浪式加载控件


WaveLoadingView - 帮你轻松实现波浪式加载,提供高度定制(各种姿势),总有一种玩法适合你。

贝塞尔曲线开发的艺术


贝塞尔曲线开发的艺术

六边形战士—雷达图实现


一个自定义雷达图的实现思想

Android Material 之CoordinatorLayout、AppBarLayout、CollapsingToolbarLayout、Toolbar 等的说明和使用


android design 包下的控件使用和说明,CoordinatorLayout、AppBarLayout、CollapsingToolbarLayout、Toolbar、NestedScrollView、RecyclerView、FloatingActionButton 等,附 demo 源码。

Android 高仿微信语音聊天页面高斯模糊效果


Android 高仿微信语音聊天页面高斯模糊效果

Android 位移动画之——TranslateAnimation 实现大师哥运送快递动画


Android 位移动画之——TranslateAnimation 实现大师哥运送快递动画

三种方式实现 RecyclerView 的 Item 点击事件


  1. 通过 RecyclerView 已有的方法 addOnItemTouchListener() 实现;2. 在创建 ItemView 时添加点击监听;3. 当 ItemView attach RecyclerView 时实现。
[手摸手教你写炫酷控件(仿即刻首页垂直滚动图)](https://link.jianshu.com?t=https%3A%2F%2Fjuejin.im%2Fentry%2F57a8541f0a2b58005860b934)

简单易懂!手摸手一步步教你

Android 自定义卡劵效果 View


轻松简单的实现卡劵效果

Google I/O 2016 笔记之 Layout 新世界 - ConstraintLayout


Google I/O 2016 上发布了新的布局:ConstraintLayout,本文介绍了此布局的基础使用。

还在羡慕微信/微博的图片处理?-Android 酷炫图片处理 (下)


Android 酷炫优雅的图片处理,让你的 app 逼格逐渐高起来!

仿淘宝、京东多重商品属性组合 Sku 标签


首先声明, 在这个 Demo 中我用到了 zhy 大神的自定义控件 Android TagFlowLayout 完全解析 一款针对 Tag 的布局, 我只是在他的基础上对源码进行了一些修改, 可以运用到我的项目中。

Material Design Library 使用汇总


本文对 Material Design Library 里面的库类的使用做一个简单的汇总,方便以后能快速查询、快速上手使用。本文包括以下内容:
Color Palette、 Toolbar、AppBarLayout、CollapsingToolbarLayout、CoordinatorLayout、DrawerLayout、NavigationView、Floating Action Button (FAB)、Snackbar、TabLayout、TextInputLayout ......

从无到有打造一个炫酷的进度条效果


从无到有打造一个炫酷的进度条效果,实现一个特别的进度提示效果~

简单易用支持下拉放大, 上拉跳转的 Recyclerview


使用步骤也十分简单

教你一分钟实现动态模糊效果


仿雅虎天气,实现动态模糊

30 行代码,打造一个垂直的 ViewPager


30 行代码,如何打造一个垂直的 ViewPager?

BRVAH 小白笔记之分组篇


最近在公司做小项目,需要用到分组功能,一般来讲,可以使用 listview 嵌套 gridview 来实现,也可以用 recyclerview 来实现。博主试过使用 listview 嵌套 gridview,实现是实现了,就是优化不到位,会掉帧。然后使用 recyclerview,想了大半天做了出来,可是效果也不好。于是问了下能不能用第三方库,毕竟前段时间发现了 BaseRecyclerViewAdapterHelper(下文简称 BRVAH)这个优秀的 RecyclerViewAdapter 高度定制开源库。结果得到了肯定,并且公司鼓励使用优秀的第三方开源库!然后!跟着我一起用吧!

ViewPager 从入门到带你撸个启动页之实战 PageTransformer 切换动画特效(四)


Android 从 3.0 开始,google 官方新增了属性动画,而 ViewPager 也新增了 ViewPager.PageTransformer 接口,我们可以通过这个接口来实现非常不错动画切换效果,Google 官网也给我们提供了两个动画例子:DepthPageTransformer 和 ZoomOutPageTransformer。下面我们先来看看这两个动画效果

福利:如何打造一款万能的 RecyclerView 适配器


潇潇洒洒走一回,没有最吊,只有更吊~~~ 教你如何从零开始打造一款万能适配器,以后还会慢慢更新的

安卓着色器 (tint) 使用实践


一张质量图适配所有颜色

FlyRefresh—不一样的下拉刷新


第一眼看到这个设计就觉得眼前一亮,在 Dribble 上获得了 1.7k 多的 like,微博上也有大量转发。可见确实一个很成功的设计。我准备在 Android 上来实现它。

栗子——Android 新特性之筛选菜单


Android 新特性之筛选菜单

自定义 ShareView 之 NavigationBar 适配


分享功能在实际项目开发中经常用到的,有可能是在屏幕中间弹出的 Dialog 对话框,也有可能是从屏幕下方滑上来的视图。本文是自定义从屏幕下方滑上来的分享控件,将 ShareView add 到 DecorView 上,但是在带 NavigationBar 导航条的手机上出现适配问题,下面是我碰到的问题及解决方法。

Material Design 系列,自定义 Behavior 实现 Android 知乎首页


Android 自定义 Behavior 实现 Android 知乎首页上下滑动时动画隐藏和显示 FAB、TAB 等,留出更大的空间给用户浏览内容。

Android 用户引导库 MaterialIntroView 使用及源码分析


轻巧而精致的 Android 用户引导库。一种能够快速实现,方便维护,并尽可能减少与设计师之间的冗余沟通的解决方案。

一个库搞定 recyclerview


商业项目持续打磨,功能强大、使用简单、扩展性强。

我们是如何实现漂亮动画的-列车飞驰的加载动画


上周,我们把 Captain Train app 更名为了 Trainline。这意味着我们必须改变颜色,图标,空白状态以及动画等以匹配我们的新商标。

在创建新的加载动画的时候我们遇到了一些问题。因此我觉得这篇博客可能对开发者伙伴们有点用。实际上,我将尝试解释一下我们是如何设计与实现这个动画的。

LeafChart(4)- 绘制动画曲线图


自定义图表库——绘制动态曲线图

会了这些,你也能成为自定义 View 大咖


收集了自定义 View 最优质的学习资料。

Android 自定义控件之 CircleRotaProgressBar


自定义了一个圆形 ProgressBar 可以设置动画状态,表示进度在进行还是暂停

把 RecyclerView 撸成 马 蜂 窝


教你一步步实现一个 RecyclerView 的蜂窝布局管理器。

Android 自定义控件之自定义 ViewGroup 实现标签云


前面几篇讲了自定义控件绘制原理 Android 自定义控件之基本原理(一),自定义属性 Android 自定义控件之自定义属性(二),自定义组合控件 Android 自定义控件之自定义组合控件(三),常言道:“好记性不如烂笔头,光说不练假把式!!!”,作为一名学渣就是因为没有遵循这句名言才沦落于此,所以要谨遵教诲,注重理论与实践相结合,今天通过自定义 ViewGroup 来实现一下项目中用到的标签云。

Android 绕球心旋转的引导页效果


Android 绕球心旋转的引导页效果

真实项目运用 - RecyclerView 封装


今天这篇文章来谈一谈 RecyclerView 的封装,对 RecyclerView 的一些使用点进行总结,以及如何将 RecyclerView 的 adapter 进一步简化。

自定义 View 之高仿 nubia 计时器


一个高仿 nubia 计时器的自定义 view,有兴趣的可以看一下。。。觉得还可以请给个start >_<

实现炫酷的 Material 登录效果


UI 美观,动画效果丰富!

TextInput 详解 · Material Design Part 1


从 0 开始,按一个 App 打开流程的路线,介绍所有 Material Design 组件的使用和部分关键效果的实现原理,欢迎阅读~

SuperRecycleView 让你神速的完成你的列表 - Android


一个集成了下拉刷新上拉加载,侧滑菜单的 RecycleView。可让你一句话实现复杂的列表

干货:五分钟带你看懂NestedScrolling嵌套滑动机制


Android NestedScrolling嵌套滑动机制 Android在发布5.0之后加入了嵌套滑动机制NestedScrolling,为嵌套滑动提供了更方便的处理方案。在此对嵌套滑动机制进行详细的分析。 嵌套滑动的常见用法比如在滑动列表的时候隐藏相关的TopBar和Bot…

ViewPageerTransform 深入理解


ViewPageerTransform 深入理解, 给 viewpager 切换加动画

Android 实现自己的 RecyclerView 加载更多


Android 实现自己的 RecyclerView 加载更多其实很简单

在2015年谷歌开发中大会上,谷歌推出了全新的设计语言--Material Design。在发布的众多新控件中,最有意思的一个要数更强大的FrameLayout--CoordinatorLayout。CoordinatorLayout实现了多种Material Design中提到的滚动效果,让你不用写动画代码就能动起来,这些效果包括:

图片 1

  1. 让FloatingActionButton上下滑动,为Snackbar留出空间。
  2. 扩展、收缩Toolbar或者头部,让主内容区域有更多的空间。
  3. 控制某个view扩展还是收缩,以及其显示大小、比例等,包括视差滚动效果动画。
  4. ......

Android6.x介绍(三)

来欣赏一下facebook的效果

作者:李旺成

图片 2facebook

时间:2016年4月23日


接上篇:AndroidStudyDemo之Android6.x新控件介绍(二)

万变不离其宗,我们从基本入手,一步步来掌握CoordinatorLayout

六、CoordinatorLayout

先看效果:

图片 3

CoordinatorLayout 效果演示

初探

使用CoordinatorLayout需要在Gradle加入Support Design Library:

compile 'com.android.support:appcompat-v7:24.2.1'

我们来看看最基本的布局效果

<android.support.design.widget.CoordinatorLayout xmlns:andro android:layout_width="match_parent" android:layout_height="match_parent"> <android.support.design.widget.AppBarLayout android: android:layout_width="match_parent" android:layout_height="wrap_content"> <android.support.v7.widget.Toolbar xmlns:app="http://schemas.android.com/apk/res-auto" android: app:title="@string/app_name" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize"> </android.support.v7.widget.Toolbar> </android.support.design.widget.AppBarLayout> <android.support.v4.widget.NestedScrollView xmlns:app="http://schemas.android.com/apk/res-auto" app:layout_behavior="@string/appbar_scrolling_view_behavior" android:layout_width="match_parent" android:layout_height="match_parent"> <LinearLayout android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> .... </LinearLayout> </android.support.v4.widget.NestedScrollView></android.support.design.widget.CoordinatorLayout>

这里先不说源码,我直接对布局中一些新概念简单的说明下,

  1. CoordinatorLayout作为最顶层视图,将旗下所有的子view进行调度管理,以达到相互依赖的关系。这个关系是通过Behavior发起的,包括了滑动状态的处理以及View状态的处理
  2. AppBarLayout其实就是一个垂直的线性布局,跟线性布局相比他实现了很多Material Design效果中Bar的功能,即滑动手势
  3. Behavior是Design库中新诞生的一个布局概念,让你有机会以非侵入式的方式去处理这个View如何和其他View的交互行为。Behavior需要设置在触发事件的view上,且这个View必须是CoordinatorLayout的第一层级下的子view,否则没有效果,因为Behavior的初始化是在CoordinatorLayout的LayoutParams中通过反射完成的,如果你把值写在LinearLayout中,那么就不行了。Behavior实例化既可以像上面提到的用反射将一个类的路径通过app:layout_behavior声明,比如这里appbar_scrolling_view_behavior的值是android.support.design.widget.AppBarLayout$ScrollingViewBehavior,也就是AppBarLayout的内部类ScrollingViewBehavior,同时也可以在你的自定义View类上添加@DefaultBehavior(你的Behavior.class)这句注解,就像AppBarLayout一样
@CoordinatorLayout.DefaultBehavior(AppBarLayout.Behavior.class)
  1. Behavior本身是一个接口而已,调度过程其实是通过NestedScrollingParent与NestedScrollingChild这2个接口完成的,像CoordinatorLayout实现了NestedScrollingParent,RecyclerView或者NestedScrollView实现了NestedScrollingChild接口。有些原生的View好比ListView是没有实现这个接口的,如果想让它拥有滑动嵌套功能,那就必须去设置嵌套滑动条件允许,即设置setNestedScrollingEnabled为true。顺带简单说一下流程,因为已经实现了嵌套滚动,所以NestedScrollView的滚动影响着CoordinatorLayout,CoordinatorLayout就会遍历去找所有第一层Behavior。这里找到了AppBarLayout.Behavior,然后AppBarLayout就滚动起来了,顺带着通过appbar_scrolling_view_behavior把NestedScrollView也移动起来
  2. 一般我们看到的文章都是描述CoordinatorLayout跟AppBarLayout还有ViewPager什么的,其实任何View只需使用Behavior配置好关系,都可以在CoordinatorLayout中实现嵌套滚动这个概念,跟AppBarLayout是没有任何关系的
  3. 给大家一个思考题

图片 4xml效果

看看布局文件的效果,可能你会诧异,为什么NestedScrollView下面会多一块出来?这里面卖一个关子,等我们说到自定义Behavior的时候再来解释

OK,大致的概念我们介绍完了,run看看。嗯,貌似跟一般线性布局也没啥特别的区别

图片 5初始效果

等下,好像有点不对劲啊,刚才我们说的滚动功能去哪了?原来还有一个属性 layout_scrollFlags。只要你对AppBarLayout中的子view加这个属性,并且至少包含scroll这个flag,那么他就能滚动起来。否则就像之前那样,一直固定在顶部没啥变化

app:layout_scrollFlags="scroll"

图片 6scroll

简介

CoordinatorLayout 命名中带有协调的意思,它的作用正是协调(Coordinate)其他组件, 实现联动,CoordinatorLayout 实现了多种 Material Design 中提到的滚动效果。

  • 超级 FrameLayout
  • CoordinatorLayout 使用新的思路通过协调调度子布局的形式实现触摸影响布局的形式产生动画效果
  • 提供了几种不用写动画代码就能工作的动画效果,如下:
    1.让浮动操作按钮上下滑动,为Snackbar留出空间
    2.扩展或者缩小 Toolbar 或者头部,让主内容区域有更多的空间
    3.控制哪个 View 应该扩展还是收缩,以及其显示大小比例,包括视差滚动效果动画

看下官方的介绍:

图片 7

CoordinatorLayout 类

上图圈出了几个关键点,有两个相对来说“较新的概念”,从这看出 CoordinatorLayout 控件可能比较复杂的,不过不用着急,我们可以抽丝剥茧,逐步深入的去学习它。

CoordinatorLayout 继承自 ViewGroup,官方介绍的第一句话就是:“CoordinatorLayout is a super-powered FrameLayout .”。从继承结构来看,收获不大,不过有个地方要注意,那就是它实现了一个接口:NestedScrollingParent。

简单介绍下 NestedScrolling

在 Android L 中提供了一套 API 来支持嵌套(或者说嵌入)的滑动效果(Support V 4 提供了兼容 API),可以称之为嵌套滑动机制(NestedScrolling)。通过 NestedScrolling,能实现很多很复杂的滑动效果。

NestedScrolling 提供了一套父 View 和子 View 滑动交互机制。要完成这样的交互,父 View 需要实现 NestedScrollingParent 接口,而子 View 需要实现 NestedScrollingChild 接口。

关于 NestedScrolling,有兴趣的可以去看看这篇文章:Android NestedScrolling 实战,这里就不展开了。

CoordinatorLayout 实现了 NestedScrollingParent 接口,其包裹的子控件如果要想能更好的配合 CoordinatorLayout,就需要实现 NestedScrollingChild 接口。

layout_scrollFlags

AppBarLayout中的子控件通过layout_scrollFlags这个属性或者setScrollFlags才能展现出他们的滚动行为。除了这个scroll以外,还有4个flag,他们分别是snapenterAlwaysenterAlwaysCollapsedexitUntilCollapsed,下面我们分别来举例进行说明

scroll:所有想滚动的view都需要设置这个flag, 没有设置这个flag的view将被固定在屏幕顶部。这个我们已经见识过了

snap:这个直接翻译成“折断”没有人能够明白。如果你曾经实现过自定义滑动View的话,这个效果应该很好理解:被"关心"的这个View如果显示了一半,就全显示出来,否则则隐藏。

app:layout_scrollFlags="scroll|snap"

图片 8snap

enterAlways:往上滑动的时候被"关心"的这个View隐藏,往下滑的时候显示

app:layout_scrollFlags="scroll|enterAlways"

图片 9enterAlways

enterAlwaysCollapsed:向上滑动的时候被"关心"的这个View隐藏,向下滑动时先展现一个最小高度,等到滑动到NestedScrollView最顶部的时候再完全展现出来

<android.support.v7.widget.Toolbar xmlns:app="http://schemas.android.com/apk/res-auto" android: app:title="@string/app_name" app:layout_scrollFlags="scroll|enterAlways|enterAlwaysCollapsed" android:layout_width="match_parent" android:layout_height="200dip" android:minHeight="?attr/actionBarSize"></android.support.v7.widget.Toolbar>

注意这边一定要有一个最小高度,即minHeight属性,并且enterAlwaysCollapsed一定要搭配enterAlways和scroll才能正常展现

图片 10enterAlwaysCollapsed

exitUntilCollapsed:向上滚动的时候被"关心"的这个View逐渐折叠到最小高度并固定到顶端

<android.support.v7.widget.Toolbar xmlns:app="http://schemas.android.com/apk/res-auto" android: app:title="@string/app_name" app:layout_scrollFlags="scroll|exitUntilCollapsed" android:layout_width="match_parent" android:layout_height="200dip" android:minHeight="?attr/actionBarSize"></android.support.v7.widget.Toolbar>

注意这边也一定要有一个最小高度minHeight,并且exitUntilCollapsed一定要搭配scroll才能正常展现

图片 11exitUntilCollapsed

这5种flag介绍完毕,最后提醒大家,如果你的AppBarLayout中包含其他的View,那么含有layout_scrollFlags的标签的View请布局在前面。因为AppBarLayout实际上是一个LinearLayout,可以想象一下顺序倒过来是一个什么样的场景,这里我就不多说了

简单使用

1、Snackbar 与 FAB 浮动效果
先看效果:

图片 12

Snackbar 与 FAB 浮动效果

上图演示的效果,可以说是 CoordinatorLayout 最简单的一种使用了。

Snackbar 一般出现在屏幕的底部,这容易覆盖住靠近底部的 FAB(FloatingActionButton)。为了给 Snackbar 留出空间,FAB 需要向上移动。

实现这种效果很简单(其实在 Snackbar 中已经用了,这里再稍微说两句),只要将 FAB 放到 CoordinatorLayout 布局中,FAB 就将自动产生向上移动的动画。FAB 有一个默认的 behavior来检测 Snackbar 的添加并让按钮在 Snackbar 之上呈现上移与 Snackbar 等高的动画。

看代码:

<?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"
    android:id="@+id/cl_root"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <!-- 任何其他布局 -->
    <android.support.design.widget.FloatingActionButton
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="bottom|right"
        android:layout_margin="16dp"
        android:clickable="true"
        android:onClick="onClick"
        android:src="@mipmap/ic_check_white"
        app:layout_anchorGravity="bottom|right|end"/>
</android.support.design.widget.CoordinatorLayout>

// 点击回调
public void onClick(View v) {
    Snackbar snackbar = Snackbar.make(mRootCL,
            "我是普通 Snackbar", Snackbar.LENGTH_SHORT);
    snackbar.show();
}

2、Toolbar 的显示与隐藏
先看效果:

图片 13

Toolbar 的显示与隐藏效果

为了让 Toolbar 能够响应滚动事件,这里要用到一个新控件 AppBarLayout,该控件会在下面介绍,这里先不讨论,直接用。

来看 Layout 中是如何使用的:

<?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"
    android:id="@+id/cl_root"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <android.support.design.widget.AppBarLayout
        android:id="@+id/appbar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:theme="@style/ThemeOverlay.AppCompat">
        <android.support.v7.widget.Toolbar
            android:id="@+id/tb_title"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:minHeight="?attr/actionBarSize"
            android:background="@color/colorPrimary"
            app:layout_scrollFlags="scroll|enterAlways" />
    </android.support.design.widget.AppBarLayout>
    <android.support.v7.widget.RecyclerView
        android:id="@+id/rv_content"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_behavior="@string/appbar_scrolling_view_behavior"/>
    <android.support.design.widget.FloatingActionButton
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="bottom|right"
        android:layout_margin="16dp"
        android:clickable="true"
        android:onClick="onClick"
        android:src="@mipmap/ic_check_white"
        app:layout_anchor="@id/rv_content"
        app:layout_anchorGravity="bottom|right|end"/>
</android.support.design.widget.CoordinatorLayout>

首先,让 AppBarLayout 作为 CoordinatorLayout 的第一个子 View,将 Toolbar 包裹在其中。
AppBarLayout 里面定义的 Toolbar 需要设置 app:layout_scrollFlags 属性,app:layout_scrollFlags 属性里面必须至少启用scroll 这个 flag,这样这个 View 才会滚动出屏幕,否则它将一直固定在顶部。

app:layout_scrollFlags 属性可以使用如下 flag:

  • scroll:所有想滚动出屏幕的 View 都需要设置这个 flag,没有设置这个 flag 的 View 将被固定在屏幕顶部
  • enterAlways:一旦向上滚动这个 View 就可见,这个 flag 让任意向下的滚动都会导致该 View 变为可见,启用快速“返回模式”
  • enterAlwaysCollapsed:顾名思义,这个 flag 定义的是何时进入(已经消失之后何时再次显示)。假设你定义了一个最小高度(minHeight)同时 enterAlways 也定义了,那么 View 将在到达这个最小高度的时候开始显示,并且从这个时候开始慢慢展开,当滚动到顶部的时候展开完
  • exitUntilCollapsed:同样顾名思义,这个 flag 定义何时退出,当你定义了一个 minHeight,这个 View 将在滚动到达这个最小高度的时候消失。

特别注意:所有使用 scroll flag 的 View 都必须定义在没有使用 scroll flag 的 View 前面,这样才能确保所有的 View 从顶部退出,留下固定的元素。

PS:CoordinatorLayout 还提供了 layout_anchor 和 layout_anchorGravity 属性一起配合使用,可以用于放置 floating view,比如FloatingActionButton 与其他 View 的相对位置。
(参考自:Android应用Design Support Library完全使用实例)

然后,定义 AppBarLayout 与 RecyclerView 之间的联系(可以使用任意支持嵌套滚动的 View 都可以,在这里使用了 RecyclerView 来演示)。在 RecyclerView 中添加属性 app:layout_behavior。

support library 包含了一个特殊的字符串资源 @string/appbar_scrolling_view_behavior,它和 AppBarLayout.ScrollingViewBehavior 相匹配,用来通知 AppBarLayout 这个特殊的 View 何时发生了滚动事件,这个 Behavior 需要设置在触发事件(滚动)的 View 之上。
(参考自:Android应用Design Support Library完全使用实例)

最后,其实在完成上面两步之后,就已经完成了 Toolbar 随着 RecyclerView 显示隐藏的功能,剩下的就只需要为 RecyclerView 填充数据即可:

private void initData() {
    LinearLayoutManager layoutManager = new LinearLayoutManager(this);
    layoutManager.setOrientation(OrientationHelper.VERTICAL);
    // 设置布局管理器
    mContentRV.setLayoutManager(layoutManager);
    ArrayList dataList = new ArrayList<>(100);
    for (int i = 0; i < 100; i++) {
        dataList.add("DIY-ITEM:" + i);
    }
    RecyclerAdapter adapter = new RecyclerAdapter(dataList);
    mContentRV.setAdapter(adapter);
}

为了使 Toolbar 有滑动效果,必须做到如下三点:

  1. CoordinatorLayout 作为布局的父布局容器
  2. 给需要滑动的组件设置 app:layout_scrollFlags=”scroll|enterAlways” 属性
  3. 给滑动的组件设置 app:layout_behavior 属性
    (参考自:android CoordinatorLayout使用)

本文由金沙澳门官网发布于医学科学,转载请注明出处:小试牛刀,x新控件介绍

关键词:

上一篇:没有了
下一篇:没有了