在 android 滚动视图中处理滚动
handling scrolling in android scrollview
我正在使用 this library 在我的 android 应用程序中创建一个浮动操作按钮。我需要的是当我向下滚动时隐藏浮动操作按钮,当我向上滚动时再次显示它。问题是我有一个 FrameLayout
和一个不包含 setOnScrollListener()
!
的 ScrollView
我读了 this solution,但据说它很慢。
谁能告诉我如何在不损失性能的情况下获得我正在寻找的功能?
它提供了一个浮动操作按钮,向下滚动时该按钮会消失:-)
一种选择是创建一个具有滚动侦听器的 ObservableScrollView。 Google 在 IOSched14 应用程序中使用此方法。创建它的一种方法可能是:
public class ObservableScrollView extends ScrollView {
private boolean mScrollingEnabled = true;
private ArrayList<Callbacks> mCallbacks = new ArrayList<Callbacks>();
public ObservableScrollView(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
protected void onScrollChanged(int l, int t, int oldl, int oldt) {
super.onScrollChanged(l, t, oldl, oldt);
for (Callbacks c : mCallbacks) {
c.onScrollChanged(l - oldl, t - oldt);
}
}
@Override
public int computeVerticalScrollRange() {
return super.computeVerticalScrollRange();
}
public void addCallbacks(Callbacks listener) {
if (!mCallbacks.contains(listener)) {
mCallbacks.add(listener);
}
}
public static interface Callbacks {
public void onScrollChanged(int deltaX, int deltaY);
}
public void setScrollingEnabled(boolean scrollingEnabled) {
mScrollingEnabled = scrollingEnabled;
}
// @Override
// public boolean onTouchEvent(MotionEvent ev) {
// if (!mScrollingEnabled) return false;
// return super.onTouchEvent(ev);
// }
}
只需添加它而不是您的 ScrollView,然后使用 addCallbacks 方法附加一个侦听器:
ObservableScrollView scrollView = new ObservableScrollView(context);
scrollView.addCallbacks(this);
我正在使用 this library 在我的 android 应用程序中创建一个浮动操作按钮。我需要的是当我向下滚动时隐藏浮动操作按钮,当我向上滚动时再次显示它。问题是我有一个 FrameLayout
和一个不包含 setOnScrollListener()
!
ScrollView
我读了 this solution,但据说它很慢。
谁能告诉我如何在不损失性能的情况下获得我正在寻找的功能?
它提供了一个浮动操作按钮,向下滚动时该按钮会消失:-)
一种选择是创建一个具有滚动侦听器的 ObservableScrollView。 Google 在 IOSched14 应用程序中使用此方法。创建它的一种方法可能是:
public class ObservableScrollView extends ScrollView {
private boolean mScrollingEnabled = true;
private ArrayList<Callbacks> mCallbacks = new ArrayList<Callbacks>();
public ObservableScrollView(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
protected void onScrollChanged(int l, int t, int oldl, int oldt) {
super.onScrollChanged(l, t, oldl, oldt);
for (Callbacks c : mCallbacks) {
c.onScrollChanged(l - oldl, t - oldt);
}
}
@Override
public int computeVerticalScrollRange() {
return super.computeVerticalScrollRange();
}
public void addCallbacks(Callbacks listener) {
if (!mCallbacks.contains(listener)) {
mCallbacks.add(listener);
}
}
public static interface Callbacks {
public void onScrollChanged(int deltaX, int deltaY);
}
public void setScrollingEnabled(boolean scrollingEnabled) {
mScrollingEnabled = scrollingEnabled;
}
// @Override
// public boolean onTouchEvent(MotionEvent ev) {
// if (!mScrollingEnabled) return false;
// return super.onTouchEvent(ev);
// }
}
只需添加它而不是您的 ScrollView,然后使用 addCallbacks 方法附加一个侦听器:
ObservableScrollView scrollView = new ObservableScrollView(context);
scrollView.addCallbacks(this);