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 多一点,但不要设置太大,导致高度过低这样会影响正常的拉动时显示的提示的高度



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






目录
相关文章
|
2月前
|
JavaScript 前端开发
不懂module.exports、exports、export的区别,我惨遭diss
【10月更文挑战第22天】不懂module.exports、exports、export的区别,我惨遭diss
|
8月前
|
JavaScript 前端开发
使用styled-components控制主题切换(有手就行)
使用styled-components控制主题切换(有手就行)
144 0
|
Android开发
Magisk模块:Fullscreen Immersive Gestures隐藏小白条
Magisk模块:Fullscreen Immersive Gestures隐藏小白条
3492 0
|
存储 监控 JavaScript
保熟的TS知识,拜托,超快超酷的好吗
这一步对于很多人来说是最简单的一步,也是最难的一步,说简单是因为这确确实实仅是入门的一步,就是一个环境配置,说难则是因为很多人无法跨出这一步,当你跨出这一步之后,你会发现后面的真的学得很快很快,现在,就让我们一起跨出这一步吧~
81 0
好客租房162-css modules在项目中的应用
好客租房162-css modules在项目中的应用
154 0
好客租房162-css modules在项目中的应用
|
前端开发
好客租房161-css modules的说明
好客租房161-css modules的说明
86 0
好客租房161-css modules的说明
|
程序员
28张图助我学废TS
28张图助我学废TS
28张图助我学废TS
|
Java Linux Android开发
关于Android设计及其意义
> 2019.3.12:修改第三部分 ##1. 引言 ##        现实工作中经常可以听到一些言论:框架的升级带来协议性能的提升、编程模式的变革带来业务的飞跃...... 姑且不论这些表述是否有问题,实际上如果系统地看待事物,可能会有不太一样的发现。以LINUX为例,尽管其内核大获成功,但如果不是遵循POSIX、并成为一个开源、精简的U
4547 0