PullToRefreshListView設置標題置頂和下拉跟隨

        這幾天想着界面的優化,關於PullToRefreshListView標題欄置頂和下拉跟隨的效果。這裏說說個人大致思路(若是你有跟好的方法,不吝賜教。)在listview的頭部添加一個虛擬的headerView(跟標題同樣)並設置成INVISIBLE。而後在下拉的時候隱藏標題欄,顯示headerView。java

        首先看一下PullToRefreshBase的源碼。這裏是得到PullToRefreshListView下拉的距離(value)。ide

protected final void setHeaderScroll(int value) {
    if (null != mOnBack) {
        this.value = value;
        mOnBack.OnBack(value);
    }
    if (DEBUG) {
        Log.d(LOG_TAG, "setHeaderScroll: " + value);
    }

    // Clamp value to with pull scroll range
    final int maximumPullScroll = getMaximumPullScroll();
    value = Math.min(maximumPullScroll, Math.max(-maximumPullScroll, value));


這裏的距離能夠經過mOnBack.OnBack(value);的回調函數獲得。在Activity頁面中須要實現PullToRefreshBase.OnBack的回調。函數

refreshListView.setOnBack(this);
@Override
    public void OnBack(int scrollY) {
        mScrollY = scrollY;
        if (scrollY == 0) {
            count++;
        }
        if (count == 2) {
            ll_head.setVisibility(View.VISIBLE);
            headerView.setVisibility(View.INVISIBLE);
            count = 0;
        } else {
            ll_head.setVisibility(View.GONE);
            headerView.setVisibility(View.VISIBLE);
        }
    }

        在這裏一次刷新,scroollY會有2次變爲0的時候,分別是下拉頭部加載佈局出現放手時和加載完成時。還一種方法是OnBack和setOnScrollListener結合使用。這種狀況就不用判斷2次0了。佈局

@Override
public void OnBack(int scrollY) {
    ll_head.setVisibility(View.GONE);
    headerView.setVisibility(View.VISIBLE);
}
 @Override
 public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
    if (!refreshListView.isHeaderShown()) {
        ll_head.setVisibility(View.VISIBLE);
        headerView.setVisibility(View.INVISIBLE);
    }
}

        這裏會有一個bug,就是刷新的時候向上滑動時,標題會跟着一塊走了,沒有置頂的效果。只有刷新完成時纔會有咱們本身想要的效果。優化

        總體感受仍是第一種方法好點。若是你有更好的方法,不吝賜教。繼續努力爭取解決這個問題。
this

相關文章
相關標籤/搜索