AndroidPullToRefresh拉動效果配置
最近用了 開源的 AndroidPullToRefresh 庫,但是發現拉動時的效果有個很奇怪的地方,無論上下拉動,當列表滾動到頂部或底部時,會瞬間彈出半個列表高度的拉動提示,感覺很不舒服,這種提示根本沒必要,太醜了,而且可能會導致一些奇怪的小問題,於是查看源碼搞了半天終於知道怎麼回事了。
不過話說這個庫還是很有名氣的,但是網上真正詳細介紹他的幾乎沒有,中文資料也難找,也許大家在這上麵遇到的問題不多吧~~

下麵說說我的總結:
<?xml version="1.0" encoding="utf-8"?>
<com.handmark.pulltorefresh.library.PullToRefreshListView
xmlns:andro
xmlns:ptr="https://schemas.android.com/apk/res-auto"
android:
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 多一點,但不要設置太大,導致高度過低這樣會影響正常的拉動時顯示的提示的高度
現就這麼多,以後再繼續補充吧~~
最後更新:2017-04-03 12:55:27