AndroidPullToRefresh拉动效果配置

简介:

最近用了 开源的 AndroidPullToRefresh 库,但是发现拉动时的效果有个很奇怪的地方,无论上下拉动,当列表滚动到顶部或底部时,会瞬间弹出半个列表高度的拉动提示,感觉很不舒服,这种提示根本没必要,太丑了,而且可能会导致一些奇怪的小问题,于是查看源码搞了半天终于知道怎么回事了。

不过话说这个库还是很有名气的,但是网上真正详细介绍他的几乎没有,中文资料也难找,也许大家在这上面遇到的问题不多吧~~




下面说说我的总结:

<?xml version="1.0" encoding="utf-8"?>
<com.handmark.pulltorefresh.library.PullToRefreshListView
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:ptr="http://schemas.android.com/apk/res-auto"
    android:id="@+id/diaryListCt"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:scrollbars="vertical"
    android:divider="@null"
    android:dividerHeight="6dp"
    android:headerDividersEnabled="true"
    android:footerDividersEnabled="true"
    android:fadingEdge="none"
    android:cacheColorHint="@android:color/transparent"
    ptr:ptrMode="both"
    ptr:ptrOverScroll="true"
    >
</com.handmark.pulltorefresh.library.PullToRefreshListView>

1. 设置上下拉两个事件:

在 XML 中

ptr:ptrMode="both"

在 Java 中

view.setMode(PullToRefreshBase.Mode.BOTH);

注册上下拉动的自定义事件

pullToRefreshListView.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<ListView>() {
    @Override
    public void onPullUpToRefresh(PullToRefreshBase<ListView> refreshView) {
	ZLog.i(TAG, "OnRefreshListener2 onPullUpToRefresh");
	diaryList.loadNext();
    }

    @Override
    public void onPullDownToRefresh(PullToRefreshBase<ListView> refreshView) {
	ZLog.i(TAG, "OnRefreshListener2 onPullDownToRefresh");
	refreshView.onRefreshComplete();
    }
});

这里使用的是 PullToRefreshBase.OnRefreshListener2<ListView>() 接口

若是只有一个方向则把 2 字去掉使用 PullToRefreshBase.OnRefreshListener<ListView>() 接口

一般下拉触发事件后会进行一些加载之类的动作,当你的逻辑处理完成后需要回调:onRefreshComplete(); 方法,表示当前事件已完全结束,此时拉动加载中的提示才会消失。


提示:

这里有个需要注意的地方,如果使用的是 ListView 的拉动效果则该布局产生的对象本省并不是 ListView ,而是程序内部动态生成了一个 ListView 实例,若要获取真正的 ListView 对象则需要使用一个方法来获取

ListView listView = pullTorefreshView.getRefreshableView();


2. 去除滚动到顶部或底部时弹出拉动加载更多的提示窗口

主要是我自己觉得不太好看,要解决这个问题有两个办法:不显示 | 缩短高度 或 横向时的宽度

看了半天源码之后才发现其方法的具体作用,老外的东西只看方法名很多时候搞不清楚究竟是干嘛用的,

ptr:ptrOverScroll="false"

view.setPullToRefreshOverScrollEnabled(false);

上面是通过 xml 配置 和 java 中的配置方法,当设置为 false 时就不会再弹出那个提示了


缩短提示框的方法:

在库文件 PullToRefreshBase.java 中有个常量设置



此处代码:

static final float FRICTION = 2.0f;

其中 2.0f 表示弹出框的高度为ListView 是屏幕上的可视区域高度的一半,即 screenHeight / 2,是按照一个比例来的,你可以增大这个值,设置为 5 则是 屏幕的 1/5 多一点,但不要设置太大,导致高度过低这样会影响正常的拉动时显示的提示的高度



现就这么多,以后再继续补充吧~~






目录
相关文章
Flutter控件之CircularProgressIndicator
Flutter控件之CircularProgressIndicator
|
XML 缓存 数据格式
这可能是你见过的迄今为止最简单的RecyclerView Item加载动画
这可能是你见过的迄今为止最简单的RecyclerView Item加载动画
247 0
这可能是你见过的迄今为止最简单的RecyclerView Item加载动画
|
C# 数据库
基于C#的ArcEngine二次开发45:属性值设置中的DBNull、null和default
基于C#的ArcEngine二次开发45:属性值设置中的DBNull、null和default
基于C#的ArcEngine二次开发45:属性值设置中的DBNull、null和default
|
JavaScript 程序员
使用MultiSelect左右选择控件的一些设计
项目中用到左右选择的控件,网上查找了一些相关的实现,结合了一下
114 0
使用MultiSelect左右选择控件的一些设计
|
Android开发
GridView基于pulltorefresh实现下拉刷新 上拉加载更多功能
GridView基于pulltorefresh实现下拉刷新 上拉加载更多功能
|
XML Android开发 数据格式
android 个人中心下拉弹回效果-PullscrollView
android 个人中心下拉弹回效果-PullscrollView
android 个人中心下拉弹回效果-PullscrollView
|
Web App开发 .NET 容器
艾伟_转载:HttpModule的认识与深入理解
  HttpModule是向实现类提供模块初始化和处置事件。当一个HTTP请求到达HttpModule时,整个ASP.NET Framework系统还并没有对这个HTTP请求做任何处理,也就是说此时对于HTTP请求来讲,HttpModule是一个HTTP请求的“必经之路”,所以可以在这个HTTP请求传递到真正的请求处理中心(HttpHandler)之前附加一些需要的信息在这个HTTP请求信息之上,或者针对截获的这个HTTP请求信息作一些额外的工作,或者在某些情况下干脆终止满足一些条件的HTTP请求,从而可以起到一个Filter过滤器的作用。
839 0