如何确定垂直 ScrollView 的方向?
How can I determine the direction of a vertical ScrollView?
如何确定垂直 ScrollView 的方向?
我需要根据 scrollview scroll
隐藏和显示另一个线性布局
您可以使用 onScrollChanged(int l, int t, int oldl, int oldt)
方法。由于没有 setter 用于侦听器,只有那个方法,您将必须创建自己的 ScrollView class 并覆盖该方法并在您的实现中做您的事情。
public class ObservableScrollView extends ScrollView {
private static final int DEFAULT_THRESHOLD_DP = 4;
private ScrollDirectionListener scrollDirectionListener;
private int scrollThreshold;
public ObservableScrollView(Context context) {
this(context, null);
}
public ObservableScrollView(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public ObservableScrollView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init(context);
}
private void init(Context context) {
scrollThreshold = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, DEFAULT_THRESHOLD_DP, context.getResources().getDisplayMetrics());
}
@Override
protected void onScrollChanged(int x, int y, int oldX, int oldY) {
super.onScrollChanged(x, y, oldX, oldY);
if (Math.abs(y - oldY) > scrollThreshold && scrollDirectionListener != null) {
if (y > oldY) {
scrollDirectionListener.onScrollUp(Math.abs(y - oldY));
} else {
scrollDirectionListener.onScrollDown(Math.abs(y - oldY));
}
}
}
public void setScrollThresholdInPx(int px) {
scrollThreshold = px;
}
public void setScrollThresholdInDp(Context context, float dp) {
scrollThreshold = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp, context.getResources().getDisplayMetrics());
}
public void setOnScrollDirectionListener(ScrollDirectionListener listener) {
scrollDirectionListener = listener;
}
public interface ScrollDirectionListener {
void onScrollDown(int pixels);
void onScrollUp(int pixels);
}}
得到答案 :) 使用这个自定义滚动视图
ScrollView.setOnScrollDirectionListener(new ObservableScrollView.ScrollDirectionListener() {
@Override
public void onScrollDown(int pixels) {
contenttool.setVisibility(View.INVISIBLE);
}
@Override
public void onScrollUp(int pixels) {
contenttool.setVisibility(View.VISIBLE);
}
});
如何确定垂直 ScrollView 的方向? 我需要根据 scrollview scroll
隐藏和显示另一个线性布局您可以使用 onScrollChanged(int l, int t, int oldl, int oldt)
方法。由于没有 setter 用于侦听器,只有那个方法,您将必须创建自己的 ScrollView class 并覆盖该方法并在您的实现中做您的事情。
public class ObservableScrollView extends ScrollView {
private static final int DEFAULT_THRESHOLD_DP = 4;
private ScrollDirectionListener scrollDirectionListener;
private int scrollThreshold;
public ObservableScrollView(Context context) {
this(context, null);
}
public ObservableScrollView(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public ObservableScrollView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init(context);
}
private void init(Context context) {
scrollThreshold = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, DEFAULT_THRESHOLD_DP, context.getResources().getDisplayMetrics());
}
@Override
protected void onScrollChanged(int x, int y, int oldX, int oldY) {
super.onScrollChanged(x, y, oldX, oldY);
if (Math.abs(y - oldY) > scrollThreshold && scrollDirectionListener != null) {
if (y > oldY) {
scrollDirectionListener.onScrollUp(Math.abs(y - oldY));
} else {
scrollDirectionListener.onScrollDown(Math.abs(y - oldY));
}
}
}
public void setScrollThresholdInPx(int px) {
scrollThreshold = px;
}
public void setScrollThresholdInDp(Context context, float dp) {
scrollThreshold = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp, context.getResources().getDisplayMetrics());
}
public void setOnScrollDirectionListener(ScrollDirectionListener listener) {
scrollDirectionListener = listener;
}
public interface ScrollDirectionListener {
void onScrollDown(int pixels);
void onScrollUp(int pixels);
}}
得到答案 :) 使用这个自定义滚动视图
ScrollView.setOnScrollDirectionListener(new ObservableScrollView.ScrollDirectionListener() {
@Override
public void onScrollDown(int pixels) {
contenttool.setVisibility(View.INVISIBLE);
}
@Override
public void onScrollUp(int pixels) {
contenttool.setVisibility(View.VISIBLE);
}
});