在 android 滚动视图中处理滚动

handling scrolling in android scrollview

我正在使用 this library 在我的 android 应用程序中创建一个浮动操作按钮。我需要的是当我向下滚动时隐藏浮动操作按钮,当我向上滚动时再次显示它。问题是我有一个 FrameLayout 和一个不包含 setOnScrollListener()!

ScrollView

我读了 this solution,但据说它很慢。

谁能告诉我如何在不损失性能的情况下获得我正在寻找的功能?

Try this library.

它提供了一个浮动操作按钮,向下滚动时该按钮会消失:-)

一种选择是创建一个具有滚动侦听器的 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);