美文网首页
RecycleView 上下滚动回调

RecycleView 上下滚动回调

作者: 余炳高笔记 | 来源:发表于2019-08-19 15:46 被阅读0次

import android.support.v7.widget.RecyclerView;

import android.support.v7.widget.RecyclerView.OnScrollListener;

import android.view.View;

/**

*  RecycleView滚动回调

*/

public abstract class UniqueScrollListenerextends OnScrollListener {

/**

* 防止轻微触屏 影响用户体验

*/

    private static final int accidentHeight =120;

/**

* 滚到超过 防止轻微触屏 则回调

*/

    private int scrollHeight =1;

    /**

* 记录同方向

* 一个方向只回调一次

*/

    private boolean isVisible =true;

/**

* 标记开始透明度变化

*/

    private boolean startScroll;

    /**

* 滚动透明度变化

*/

    private float alphaScrollHeight =0f;

    /**

* 防止极速滑动到顶部 机率非常小

*/

    private int scroll =0;

    @Override

    public void onScrolled(RecyclerView recyclerView, int dx, int dy) {

super.onScrolled(recyclerView, dx, dy);

        if (scrollHeight >accidentHeight &&isVisible) {

// 方向:往底部滚动

            if (isVisible) {

isVisible =false;

                startScroll =true;

                scrollHeight =0;

                alphaScrollHeight =0;

                onBottomDirection();

            }

}else if (scrollHeight < -accidentHeight && !isVisible) {

// 方向:往顶部滚动

            if (!isVisible) {

isVisible =true;

                startScroll =true;

                scrollHeight =0;

                alphaScrollHeight =50;

                onTopDirection();

            }

}

if ((isVisible && dy >0) || (!isVisible && dy <0)) {

scrollHeight += dy;

        }

if (startScroll) {

alphaScrollHeight += Math.abs(dy);

            float alpha =alphaScrollHeight /accidentHeight;

            if (isVisible) {

// 显示

                float i = alpha *1.25f;

                if (i >1) {

startScroll =false;

                    onScrollAlpha(1);

                }else {

onScrollAlpha(i);

                }

}else {

// 隐藏

                float i =1f - alpha *0.85f;

                if (i <0) {

startScroll =false;

                    onScrollAlpha(0);

                }else {

onScrollAlpha(i);

                }

}

}

scroll += dy;

        if (scroll <0 &&startScroll) {

startScroll =false;

            scroll =0;

            onScrollAlpha(1);

        }

}

/**

* 往顶部滑动回调

*/

    public abstract void onTopDirection();

    /**

* 往底部滑动回调

*/

    public abstract void onBottomDirection();

    /**

* 滑动时透明度变化

* view.setAlpha(i);

* view.setVisibility(i == 0 ? View.GONE : View.VISIBLE);

*/

    public abstract void onScrollAlpha(float i);

}

相关文章

网友评论

      本文标题:RecycleView 上下滚动回调

      本文链接:https://www.haomeiwen.com/subject/glxesctx.html