美文网首页
解决Android6.0以下 ScrollView 和 Hori

解决Android6.0以下 ScrollView 和 Hori

作者: 河里的枇杷树 | 来源:发表于2019-03-06 18:51 被阅读0次

问题:Android6.0以下 ScrollView 和 HorizontalScrollView没有提供滑动监听,6.0以上提供了。

        ScrollView scrollView;
        scrollView.setOnScrollChangeListener(new View.OnScrollChangeListener() {
            @Override
            public void onScrollChange(View v, int scrollX, int scrollY, int oldScrollX, int oldScrollY) {

            }
        });

解决:通过扩展 ScrollView 或者 HorizontalScrollView来实现。代码如下(自己只实验了HorizontalScrollView

package com.aihuishou.airent.view;

import android.content.Context;
import android.util.AttributeSet;
import android.view.View;
import android.widget.HorizontalScrollView;

import com.flyco.tablayout.SlidingTabLayout;

/**
 * Created by niluogege on 2019/3/6.
 */

public class StrongerHorizontalScrollView extends HorizontalScrollView {
    public StrongerHorizontalScrollView(Context context) {
        super(context);
    }

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

    public StrongerHorizontalScrollView(Context context, 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 (onMyScrollChangeListener != null) {
            onMyScrollChangeListener.onScrollChange(this, l, t, oldl, oldt);
        }
    }


    SlidingTabLayout.OnMyScrollChangeListener onMyScrollChangeListener;
    public SlidingTabLayout.OnMyScrollChangeListener getOnMyScrollChangeListener() {
        return onMyScrollChangeListener;
    }

    public void setOnMyScrollChangeListener(SlidingTabLayout.OnMyScrollChangeListener onMyScrollChangeListener) {
        this.onMyScrollChangeListener = onMyScrollChangeListener;
    }


    /**
     * 因为  HorizontalScrollView 自带的 OnScrollChangeListener 要6.0以上才能用,所以这里自定义
     */
    public interface OnMyScrollChangeListener {
        /**
         * Called when the scroll position of a view changes.
         *
         * @param v          The view whose scroll position has changed.
         * @param scrollX    Current horizontal scroll origin.
         * @param scrollY    Current vertical scroll origin.
         * @param oldScrollX Previous horizontal scroll origin.
         * @param oldScrollY Previous vertical scroll origin.
         */
        void onScrollChange(View v, int scrollX, int scrollY, int oldScrollX, int oldScrollY);
    }
}

使用方法:

        StrongerHorizontalScrollView horizontalScrollView=new StrongerHorizontalScrollView(this);
        horizontalScrollView.setOnMyScrollChangeListener(new SlidingTabLayout.OnMyScrollChangeListener() {
            @Override
            public void onScrollChange(View v, int scrollX, int scrollY, int oldScrollX, int oldScrollY) {
                
            }
        });

相关文章

网友评论

      本文标题:解决Android6.0以下 ScrollView 和 Hori

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