热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

android下拉动画框架,GitHubtracymo/SmartRefreshLayout:Android智能下拉刷新框架,支持越界回弹,集成了几十种炫酷的Header和Footer...

Android智能下拉刷新框架-SmartRefreshLayout正如名字所说,这是一个“聪明”或者说“智能”的下拉刷新布局,由于它的“智能”

Android智能下拉刷新框架-SmartRefreshLayout

png_minsdkapi.png

正如名字所说,这是一个“聪明”或者说“智能”的下拉刷新布局,由于它的“智能”,他不只是如其他的刷新布局所说的支持所有的View,还支持多层嵌套的视图结构。

除了“聪明”之外,SmartRefreshLayout还具备了很多的特点。它继承至ViewGroup 而不是其他的Layout,提高了性能。

吸取了现在流行的各种刷新布局的优点,包括谷歌官方的 SwipeRefreshLayout,现在非常流行的 TwinklingRefreshLayout 、android-Ultra-Pull-To-Refresh。还集成了各种炫酷的 Header 和 Footer。

SmartRefreshLayout的目标是打造一个强大,稳定,成熟的下拉刷新框架,并集成各种的炫酷、多样、实用、美观的Header和Footer。

特点功能:

支持所有的 View(AbsListView、RecyclerView、WebView....View) 和多层嵌套的 Layout(详细)

支持自定义并且已经集成了很多炫酷的 Header 和 Footer (图).

支持和ListView的同步滚动 和 RecyclerView、AppBarLayout、CoordinatorLayout 的嵌套滚动 NestedScrolling.

支持在Android Studio Xml 编辑器中预览 效果(图)

支持分别在 Default(默认)、Xml、JavaCode 三个中设置 Header 和 Footer.

支持自动刷新、自动上拉加载(自动检测列表滚动到底部,而不用手动上拉).

支持通用的刷新监听器 OnRefreshListener 和更详细的滚动监听 OnMultiPurposeListener.

支持自定义回弹动画的插值器,实现各种炫酷的动画效果.

支持设置主题来适配任何场景的App,不会出现炫酷但很尴尬的情况.

支持设置多种滑动方式来适配各种效果的Header和Footer:平移、拉伸、背后固定、顶层固定、全屏

支持内容尺寸自适应 Content-wrap_content

支持继承重写和扩展功能,内部实现没有 private 方法和字段,继承之后都可以重写覆盖

支持越界回弹(Listview、RecyclerView、ScrollView、WebView...View)

传送门

Demo

项目演示

1d85d99c88c53b74b1e7f65a5a47949b.png0c6bf5704918741c61a92b0a87c6852f.png

4893ca46fb600bacbab9bd9f375f73a9.pngc3f178cdf5fea59683c9b2659fcf030a.gif

风格演示

0b0e1bdb0d89893c9eea64a791ef7e33.gifgif_Dropbox.gif

下面的Header是我把github上其他优秀的Header进行的整理和集合还有优化:

gif_BezierRadar.gifgif_Circle.gif

5d0937250d9b4308f1837c49bb933c00.gifgif_Classics.gif

cc58891e2c58435692d800cceaa76f11.gifgif_Taurus.gif

gif_BattleCity.gifgif_HitBlock.gif

gif_WaveSwipe.gifgif_Material.gif

gif_StoreHouse.gifgif_WaterDrop.gif

看到这么多炫酷的Header,是不是觉得很棒?这时你或许会担心这么多的Header集成在一起,但是平时只会用到一个,是不是要引入很多无用的代码和资源?

请放心,我已经把刷新布局分成三个包啦,用到的时候自行引用就可以啦!

SmartRefreshLayout 刷新布局核心实现,自带ClassicsHeader(经典)、BezierRadarHeader(贝塞尔雷达)两个 Header.

SmartRefreshHeader 各种Header的集成,除了Layout自带的Header,其他都在这个包中.

SmartRefreshFooter 各种Footer的集成,除了Layout自带的Footer,其他都在这个包中.

简单用例

1.在 buld.gradle 中添加依赖

compile 'com.scwang.smartrefresh:SmartRefreshLayout:1.0.1'

compile 'com.scwang.smartrefresh:SmartRefreshHeader:1.0.1'//如果使用了特殊的Header

2.在XML布局文件中添加 SmartRefreshLayout

android:id="@+id/refreshLayout"

android:layout_width="match_parent"

android:layout_height="match_parent">

android:id="@+id/recyclerview"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:overScrollMode="never"

android:background="#fff" />

3.在 Activity 或者 Fragment 中添加代码

RefreshLayout refreshLayout = (RefreshLayout)findViewById(R.id.refreshLayout);

refreshLayout.setOnRefreshListener(new OnRefreshListener() {

@Override

public void onRefresh(RefreshLayout refreshlayout) {

refreshlayout.finishRefresh(2000);

}

});

refreshLayout.setOnLoadmoreListener(new OnLoadmoreListener() {

@Override

public void onLoadmore(SmartRefreshLayout refreshlayout) {

refreshlayout.finishLoadmore(2000);

}

});

使用指定的 Header 和 Footer

1.方法一 全局设置

//设置全局的Header构建器

SmartRefreshLayout.setDefaultRefreshHeaderCreater(new DefaultRefreshHeaderCreater() {

@Override

public RefreshHeader createRefreshHeader(Context context, RefreshLayout layout) {

return new ClassicsHeader(context);//指定为经典Header,默认是 贝塞尔雷达Header

}

});

//设置全局的Footer构建器

SmartRefreshLayout.setDefaultRefreshFooterCreater(new DefaultRefreshFooterCreater() {

@Override

public RefreshFooter createRefreshFooter(Context context, RefreshLayout layout) {

return new ClassicsFooter(context);//指定为经典Footer,默认是 BallPulseFooter

}

});

注意:方法一 设置的Header和Footer的优先级是最低的,如果同时还使用了方法二、三,将会被其他方法取代

2.方法二 XML布局文件指定

xmlns:app="http://schemas.android.com/apk/res-auto"

android:id="@+id/smartLayout"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:background="#444444"

app:srlPrimaryColor="#444444"

app:srlAccentColor="@android:color/white"

app:srlEnablePreviewInEditMode="true">

android:layout_width="match_parent"

android:layout_height="wrap_content"

app:srlClassicsSpinnerStyle="FixedBehind"/>

android:layout_width="match_parent"

android:layout_height="match_parent"

android:padding="@dimen/padding_common"

android:background="@android:color/white"

android:text="@string/description_define_in_xml"/>

android:layout_width="match_parent"

android:layout_height="wrap_content"

app:srlClassicsSpinnerStyle="FixedBehind"/>

注意:方法二 XML设置的Header和Footer的优先级是中等的,会被方法三覆盖。而且使用本方法的时候,Android Studio 会有预览效果,如下图:

jpg_preview_xml_define.jpg

不过不用担心,只是预览效果,运行的时候只有下拉才会出现~

3.方法三 Java代码设置

final RefreshLayout refreshLayout = (RefreshLayout) findViewById(R.id.smartLayout);

//设置 Header 为 Material风格

refreshLayout.setRefreshHeader(new MaterialHeader(this).setShowBezierWave(true));

//设置 Footer 为 球脉冲

refreshLayout.setRefreshFooter(new BallPulseFooter(this).setSpinnerStyle(SpinnerStyle.Scale));

属性 Attributes

名称-name

格式-format

描述-description

srlPrimaryColor

color

主题颜色

srlAccentColor

color

强调颜色

srlReboundDuration

integer

释放后回弹动画时长

srlHeaderHeight

dimension

Header的标准高度

srlFooterHeight

dimension

Footer的标准高度

srlDragRate

float

显示拖动高度/真实拖动高度(默认0.5,阻尼效果)

srlHeaderMaxDragRate

float

Header最大拖动高度/Header标准高度(默认2,要求>=1)

srlFooterMaxDragRate

float

Footer最大拖动高度/Footer标准高度(默认2,要求>=1)

srlEnableRefresh

boolean

是否开启下拉刷新功能(默认true)

srlEnableLoadmore

boolean

是否开启加上拉加载功能(默认true)

srlEnableHeaderTranslationContent

boolean

拖动Header的时候是否同时拖动内容(默认true)

srlEnableFooterTranslationContent

boolean

拖动Footer的时候是否同时拖动内容(默认true)

srlEnablePreviewInEditMode

boolean

是否在编辑模式时显示预览效果(默认true)

srlDisableContentWhenRefresh

boolean

是否在刷新的时候禁止内容的一切手势操作(默认false)

srlDisableContentWhenLoading

boolean

是否在加载的时候禁止内容的一切手势操作(默认false)

方法 Method

名称-name

格式-format

描述-description

setPrimaryColors

colors

主题\强调颜色

setPrimaryColorsId

colors

主题\强调颜色资源Id

setReboundDuration

integer

释放后回弹动画时长

setHeaderHeight

dimension

Header的标准高度(px/dp 两个版本)

setFooterHeight

dimension

Footer的标准高度(px/dp 两个版本)

setDragRate

float

显示拖动高度/真实拖动高度(默认0.5,阻尼效果)

setHeaderMaxDragRate

float

Header最大拖动高度/Header标准高度(默认2,要求>=1)

setFooterMaxDragRate

float

Footer最大拖动高度/Footer标准高度(默认2,要求>=1)

setEnableRefresh

boolean

是否开启下拉刷新功能(默认true)

setEnableLoadmore

boolean

是否开启加上拉加载功能(默认true)

setEnableHeaderTranslationContent

boolean

拖动Header的时候是否同时拖动内容(默认true)

setEnableFooterTranslationContent

boolean

拖动Footer的时候是否同时拖动内容(默认true)

setEnableAutoLoadmore

boolean

是否监听列表滚动到底部时触发加载事件

setDisableContentWhenRefresh

boolean

是否在刷新的时候禁止内容的一切手势操作(默认false)

setDisableContentWhenLoading

boolean

是否在加载的时候禁止内容的一切手势操作(默认false)

setReboundInterpolator

Interpolator

设置回弹动画的插值器

setRefreshHeader

RefreshHeader

设置指定的Header

setRefreshFooter

RefreshFooter

设置指定的Footer

setOnRefreshListener

OnRefreshListener

设置刷新监听器

setOnLoadmoreListener

OnLoadmoreListener

设置加载监听器

setOnRefreshLoadmoreListener

OnRefreshLoadmoreListener

同时设置上面两个监听器

setOnMultiPurposeListener

OnMultiPurposeListener

设置多功能监听器

setLoadmoreFinished

boolean

设置全部数据加载完成,之后不会触发加载事件

finishRefresh

(int delayed)

完成刷新,结束刷新动画

finishLoadmore

(int delayed)

完成加载,结束加载动画

getRefreshHeader

RefreshHeader

获取Header

getRefreshFooter

RefreshFooter

获取Footer

getState

RefreshState

获取当前状态

isRefreshing

boolean

是否正在刷新

isLoading

boolean

是否正在加载

autoRefresh

(int delayed)

触发自动刷新

autoLoadmore

(int delayed)

触发自动加载



推荐阅读
  • 本文详细介绍了Java中org.eclipse.ui.forms.widgets.ExpandableComposite类的addExpansionListener()方法,并提供了多个实际代码示例,帮助开发者更好地理解和使用该方法。这些示例来源于多个知名开源项目,具有很高的参考价值。 ... [详细]
  • RecyclerView初步学习(一)
    RecyclerView初步学习(一)ReCyclerView提供了一种插件式的编程模式,除了提供ViewHolder缓存模式,还可以自定义动画,分割符,布局样式,相比于传统的ListVi ... [详细]
  • 本文详细介绍了 com.facebook.drawee.view.SimpleDraweeView 中的 setScaleType 方法,提供了多个实际代码示例,并解释了其在不同场景下的应用。 ... [详细]
  • 深入理解Redis的数据结构与对象系统
    本文详细探讨了Redis中的数据结构和对象系统的实现,包括字符串、列表、集合、哈希表和有序集合等五种核心对象类型,以及它们所使用的底层数据结构。通过分析源码和相关文献,帮助读者更好地理解Redis的设计原理。 ... [详细]
  • 本文详细介绍了如何使用 Yii2 的 GridView 组件在列表页面实现数据的直接编辑功能。通过具体的代码示例和步骤,帮助开发者快速掌握这一实用技巧。 ... [详细]
  • 使用 Azure Service Principal 和 Microsoft Graph API 获取 AAD 用户列表
    本文介绍了一段通用代码示例,该代码不仅能够操作 Azure Active Directory (AAD),还可以通过 Azure Service Principal 的授权访问和管理 Azure 订阅资源。Azure 的架构可以分为两个层级:AAD 和 Subscription。 ... [详细]
  • 本文探讨了在Java中实现系统托盘最小化的两种方法:使用SWT库和JDK6自带的功能。通过这两种方式,开发者可以创建跨平台的应用程序,使窗口能够最小化到系统托盘,并提供丰富的交互功能。 ... [详细]
  • 作为一名专业的Web前端工程师,掌握HTML和CSS的命名规范是至关重要的。良好的命名习惯不仅有助于提高代码的可读性和维护性,还能促进团队协作。本文将详细介绍Web前端开发中常用的HTML和CSS命名规范,并提供实用的建议。 ... [详细]
  • 本文介绍如何使用 Android 的 Canvas 和 View 组件创建一个简单的绘图板应用程序,支持触摸绘画和保存图片功能。 ... [详细]
  • 深入解析Android自定义View面试题
    本文探讨了Android Launcher开发中自定义View的重要性,并通过一道经典的面试题,帮助开发者更好地理解自定义View的实现细节。文章不仅涵盖了基础知识,还提供了实际操作建议。 ... [详细]
  • 本文详细介绍了Java中org.w3c.dom.Text类的splitText()方法,通过多个代码示例展示了其实际应用。该方法用于将文本节点在指定位置拆分为两个节点,并保持在文档树中。 ... [详细]
  • 本文详细介绍了 Apache Jena 库中的 Txn.executeWrite 方法,通过多个实际代码示例展示了其在不同场景下的应用,帮助开发者更好地理解和使用该方法。 ... [详细]
  • 本文介绍如何使用布局文件在Android应用中排列多行TextView和Button,使其占据屏幕的特定比例,并提供示例代码以帮助理解和实现。 ... [详细]
  • 本文介绍了Android开发中Intent的基本概念及其在不同Activity之间的数据传递方式,详细展示了如何通过Intent实现Activity间的跳转和数据传输。 ... [详细]
  • Python处理Word文档的高效技巧
    本文详细介绍了如何使用Python处理Word文档,涵盖从基础操作到高级功能的各种技巧。我们将探讨如何生成文档、定义样式、提取表格数据以及处理超链接和图片等内容。 ... [详细]
author-avatar
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有