Android开发之解决NestedScrollView滑动监听兼容低版本的方法

NestedScrollView的滑动监听目前仅限api23及以上,为了兼容低版本如下自定义方法

可以自定义NestedScrollView即可如下:

package cn.net.gfan.world.widget;

import android.content.Context;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.widget.NestedScrollView;
import android.util.AttributeSet;

/**
 * 自定义NestedScrollView
 * 解决滑动监听只能在API23以上才能使用的问题
 *
 * @author xiayiye5
 * 2020年8月3日12:56:50
 */
public class XiaYiYeNestedScrollView extends NestedScrollView {
    private OnXiaYiYeScrollChanged mOnXiaYiYeScrollChanged;

    public XiaYiYeNestedScrollView(@NonNull Context context) {
        this(context, null);
    }

    public XiaYiYeNestedScrollView(@NonNull Context context, @Nullable AttributeSet attrs) {
        this(context, attrs, 0);
    }

    public XiaYiYeNestedScrollView(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    @Override
    protected void onScrollChanged(int l, int t, int oldl, int oldt) {
        super.onScrollChanged(l, t, oldl, oldt);
        if (mOnXiaYiYeScrollChanged != null) {
            mOnXiaYiYeScrollChanged.onScroll(l, t, oldl, oldt);
        }
    }

    public void setXiaYiYeOnScrollChanged(OnXiaYiYeScrollChanged onXiaYiYeScrollChanged) {
        this.mOnXiaYiYeScrollChanged = onXiaYiYeScrollChanged;
    }

    public interface OnXiaYiYeScrollChanged {
        /**
         * 滑动的方法
         *
         * @param left    左边
         * @param top     上边
         * @param oldLeft 之前的左边
         * @param oldTop  之前的上边
         */
        void onScroll(int left, int top, int oldLeft, int oldTop);
    }
}

调用方法:

 //设置滑动监听事件
        nestNewTopic.setXiaYiYeOnScrollChanged(new XiaYiYeNestedScrollView.OnXiaYiYeScrollChanged() {
            @Override
            public void onScroll(int left, int top, int oldLeft, int oldTop) {
                final int[] colorValue = {0X00000000};
                float height = ScreenTools.dip2px(getApplicationContext(), 287) - getStatusBarHeight();
                int startColor = ContextCompat.getColor(mContext, R.color.color_transparent);
                int endColor = ContextCompat.getColor(mContext, R.color.white);
                if (top <= 0) {
                    tvTitle.setTextColor(Color.WHITE);
                    ivMainSearch.setImageResource(R.drawable.icon_main_tab_search_white);
                    ivMainMsg.setImageResource(R.drawable.icon_main_tab_msg_white);
                    colorValue[0] = startColor;
                } else if (top >= height) {
                    //设置标题栏想要的颜色
                    tvTitle.setTextColor(ContextCompat.getColor(parentContext, R.color.color_333));
                    ivMainSearch.setImageResource(R.drawable.icon_main_tab_search);
                    ivMainMsg.setImageResource(R.drawable.icon_main_tab_msg);
                    colorValue[0] = endColor;
                } else {
                    colorValue[0] = (int) argbEvaluator.evaluate(top / height, startColor, endColor);
                }
                //设置渐变背景色
                rlTitle.setBackgroundColor(colorValue[0]);
            }
        });

如上代码即可

感谢原博主:博主直达

猜你喜欢

转载自blog.csdn.net/xiayiye5/article/details/107761379
今日推荐