Android 开发:ScrollView嵌套RecycleView 冲突+监听ScrollView滑动位置

本文介绍了一种自定义ScrollView的方法,通过重写其onOverScrolled方法来实现对滚动位置的监听。当ScrollView滑动到底部或顶部时,会触发相应的回调方法,便于开发者在特定滚动位置执行自定义操作。
摘要由CSDN通过智能技术生成

重写ScrollView  注释附参考路径

import android.content.Context;
import android.util.AttributeSet;
import android.util.Log;
import android.view.View;
import android.widget.ScrollView;

/**
 * ScrollView 监听
 * https://www.cnblogs.com/Jieth/p/9192611.html
 */

public class ReadScrollView extends ScrollView {

    public ReadScrollView(Context context) {
        super(context);
    }

    public ReadScrollView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public ReadScrollView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    /**
     *
     * @param scrollX
     * @param scrollY
     * @param clampedX
     * @param clampedY
     */
    @Override
    protected void onOverScrolled(int scrollX, int scrollY, boolean clampedX, boolean clampedY) {
        super.onOverScrolled(scrollX, scrollY, clampedX, clampedY);

        View view = this.getChildAt(0);
        
        if (this.getHeight() + this.getScrollY() == view.getHeight()) {  //通过监听滑动位置+屏幕高度=View渲染高度
            if (scrollChangedListener != null) {
                scrollChangedListener.onScrollChangedBottom();
            }
        }else if(scrollY==0){

            if (scrollChangedListener != null) {
                scrollChangedListener.onScrollChangedTop();
            }

        }

    }


    private OnScrollChangedListener scrollChangedListener;

    public void setScrollChangedListener(OnScrollChangedListener scrollChangedListener) {
        this.scrollChangedListener = scrollChangedListener;
    }

    /**
     *
     */
    public interface OnScrollChangedListener {
        //到达顶部
        void onScrollChangedTop();

        //到达底部
        void onScrollChangedBottom();
        //监听变化
//        void onScrollChanged(int l,int t,int oldl,int oldt);
    }
}
ReadScrollView的使用,中间RecycleView建议包裹,会出现展示不出来数据
    <com.xinchengle.xiaokedou.utils.uiutils.ReadScrollView
        android:id="@+id/scrollView"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

         <RelativeLayout
                android:descendantFocusability="blocksDescendants"
                android:layout_width="match_parent"
                android:layout_height="match_parent">

                <androidx.recyclerview.widget.RecyclerView
                    android:id="@+id/organ_recy_vertical"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    />

            </RelativeLayout>

    </com.xinchengle.xiaokedou.utils.uiutils.ReadScrollView>
ReadScrollView监听:
   ReadScrollView scrollView = view.findViewById(R.id.scrollView);
        scrollView.setScrollChangedListener(new ReadScrollView.OnScrollChangedListener() {
            @Override
            public void onScrollChangedTop() {

            }

            @Override
            public void onScrollChangedBottom() {
                //滑动到最后一条
            }
        });

滑动出现冲突可添加

 recyclerView.setNestedScrollingEnabled(false);

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值