问题: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) {
}
});
网友评论