【Android】Scrollview 顶端固定 or 滑动锚钉(续)(ScrollView里嵌套ListView)

实际应用的时候因业务需求,需要让ListView(gridview)具有下拉刷新、下拉刷新功能,需要在ScrollView里嵌套ListView
PS:关键点——
自定义ListView,重写其onMeasure方法

    @Override
    /**
     * 重写该方法,达到使ListView适应ScrollView的效果
     */
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        DebugU.sop("list measure");
        int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,
                MeasureSpec.AT_MOST);
        super.onMeasure(widthMeasureSpec, expandSpec);
    }

PS:有位大哥总结了4种方法

此后在自定义的一个可以上下拉刷新的布局中,放置子item:ScrollView,在这个自定义的ScrollView中暴露onScrollListener监听器,这样就可以再Activity中设置ScrollView的监听,按照之前博客:Scrollview 顶端固定 or 滑动锚钉,中的动态添加删除方法,修改其中的onScroll方法如下:

 public void onScroll() {
        if (mPinnedView == null) return;

        int[] posPinnedView = new int[2];
        mPinnedViewParent.getLocationInWindow(posPinnedView);
        int[] posLayout = new int[2];
        getLocationInWindow(posLayout);
        //利用pinview与其所在的posLayout在屏幕中的相对位置来决定是否将pinView固定在FrameLayout的最顶端,
        pinView(posPinnedView[1] > posLayout[1]);
    }

PS:获取控件坐标
抽象布局(Include,merge,ViewStub)
Android 带你从源码的角度解析Scroller的滚动实现原理
Android UI测量、布局、绘制过程探究
如何正确的获得一个view的宽和高

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值