閱讀588 返回首頁    go 阿裏雲 go 技術社區[雲棲]


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

  上一篇:go Android自定義控件StaggeredGridView-瀑布流效果的GridView
  下一篇:go 對於vxworks下硬盤驅動