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

相关文章
相关标签/搜索