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