PullToRefreshListView设置标题置顶和下拉跟随

        这几天想着界面的优化,关于PullToRefreshListView标题栏置顶和下拉跟随的效果。这里说说我的大体思路(如果你有跟好的方法,不吝赐教。)在listview的头部添加一个虚拟的headerView(跟标题一样)并设置成INVISIBLE。然后在下拉的时候隐藏标题栏,显示headerView。

        首先看一下PullToRefreshBase的源码。这里是获得PullToRefreshListView下拉的距离(value)。

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,就是刷新的时候向上滑动时,标题会跟着一块走了,没有置顶的效果。只有刷新完成时才会有我们自己想要的效果。

        整体感觉还是第一种方法好点。如果你有更好的方法,不吝赐教。继续努力争取解决这个问题。

转载于:https://my.oschina.net/u/1471093/blog/498810

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值