【发布时间】:2015-10-14 10:49:42
【问题描述】:
如何确定垂直 ScrollView 的方向? 我需要根据滚动视图滚动隐藏和显示另一个线性布局
【问题讨论】:
-
看看this。
标签: android scrollview direction
如何确定垂直 ScrollView 的方向? 我需要根据滚动视图滚动隐藏和显示另一个线性布局
【问题讨论】:
标签: android scrollview direction
您可以为此使用onScrollChanged(int l, int t, int oldl, int oldt) 方法。由于没有用于侦听器的设置器,而只有该方法,因此您必须创建自己的 ScrollView 类并覆盖该方法并在您的实现中执行您的操作。
【讨论】:
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);
}
});
【讨论】: