热门标签 | 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)

触发自动加载



推荐阅读
  • 使用圣杯布局模式实现网站首页的内容布局
    本文介绍了使用圣杯布局模式实现网站首页的内容布局的方法,包括HTML部分代码和实例。同时还提供了公司新闻、最新产品、关于我们、联系我们等页面的布局示例。商品展示区包括了车里子和农家生态土鸡蛋等产品的价格信息。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 欢乐的票圈重构之旅——RecyclerView的头尾布局增加
    项目重构的Git地址:https:github.comrazerdpFriendCircletreemain-dev项目同步更新的文集:http:www.jianshu.comno ... [详细]
  • 带添加按钮的GridView,item的删除事件
    先上图片效果;gridView无数据时显示添加按钮,有数据时,第一格显示添加按钮,后面显示数据:布局文件:addr_manage.xml<?xmlve ... [详细]
  • Tkinter Frame容器grid布局并使用Scrollbar滚动原理
    本文介绍了如何使用Tkinter实现Frame容器的grid布局,并通过Scrollbar实现滚动效果。通过将Canvas作为父容器,使用滚动Canvas来滚动Frame,实现了在Frame中添加多个按钮,并通过Scrollbar进行滚动。同时,还介绍了更新Frame大小和绑定滚动按钮的方法,以及配置Scrollbar的相关参数。 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • Nginx使用(server参数配置)
    本文介绍了Nginx的使用,重点讲解了server参数配置,包括端口号、主机名、根目录等内容。同时,还介绍了Nginx的反向代理功能。 ... [详细]
  • Python正则表达式学习记录及常用方法
    本文记录了学习Python正则表达式的过程,介绍了re模块的常用方法re.search,并解释了rawstring的作用。正则表达式是一种方便检查字符串匹配模式的工具,通过本文的学习可以掌握Python中使用正则表达式的基本方法。 ... [详细]
  • 拥抱Android Design Support Library新变化(导航视图、悬浮ActionBar)
    转载请注明明桑AndroidAndroid5.0Loollipop作为Android最重要的版本之一,为我们带来了全新的界面风格和设计语言。看起来很受欢迎࿰ ... [详细]
  • Python瓦片图下载、合并、绘图、标记的代码示例
    本文提供了Python瓦片图下载、合并、绘图、标记的代码示例,包括下载代码、多线程下载、图像处理等功能。通过参考geoserver,使用PIL、cv2、numpy、gdal、osr等库实现了瓦片图的下载、合并、绘图和标记功能。代码示例详细介绍了各个功能的实现方法,供读者参考使用。 ... [详细]
  • 本文介绍了在mac环境下使用nginx配置nodejs代理服务器的步骤,包括安装nginx、创建目录和文件、配置代理的域名和日志记录等。 ... [详细]
  • Android开发实现的计时器功能示例
    本文分享了Android开发实现的计时器功能示例,包括效果图、布局和按钮的使用。通过使用Chronometer控件,可以实现计时器功能。该示例适用于Android平台,供开发者参考。 ... [详细]
  • ScrollView嵌套Collectionview无痕衔接四向滚动,支持自定义TitleView
    本文介绍了如何实现ScrollView嵌套Collectionview无痕衔接四向滚动,并支持自定义TitleView。通过使用MainScrollView作为最底层,headView作为上部分,TitleView作为中间部分,Collectionview作为下面部分,实现了滚动效果。同时还介绍了使用runtime拦截_notifyDidScroll方法来实现滚动代理的方法。具体实现代码可以在github地址中找到。 ... [详细]
  • 本文介绍了Oracle存储过程的基本语法和写法示例,同时还介绍了已命名的系统异常的产生原因。 ... [详细]
  • 本文介绍了响应式页面的概念和实现方式,包括针对不同终端制作特定页面和制作一个页面适应不同终端的显示。分析了两种实现方式的优缺点,提出了选择方案的建议。同时,对于响应式页面的需求和背景进行了讨论,解释了为什么需要响应式页面。 ... [详细]
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社区 版权所有