如何通过所需的像素值检测ScrollView滚动

时间:2015-04-24 12:44:32

标签: android android-scrollview

我正在扩展ScrollView以检测它是向上还是向下滚动。我想添加选项来检测滚动只有滚动时让我们说50像素。怎么做?我当前的scrollview代码覆盖了ScrollChanged:

public interface OnDetectScrollListener {
    void onUpScroll();
    void onDownScroll();
}

public class MyScrollView extends ScrollView {

    private OnDetectScrollListener onDetectScrollListener = null;
    private boolean scrollDown = false;
    private boolean scrollUp = false;

    .... constructors ....

    public void setOnDetectScrollListener(OnDetectScrollListener scrollViewListener) {
        this.onDetectScrollListener = scrollViewListener;
    }

    @Override
    protected void onScrollChanged(int l, int t, int oldl, int oldt) {
        super.onScrollChanged(l, t, oldl, oldt);
        if (onDetectScrollListener != null) {
            View view = (View) getChildAt(getChildCount() - 1);
            int diff = (view.getBottom() - (getHeight() + getScrollY()));

            //scroll down
            if(t > oldt){
                if(!scrollDown & oldt >= 0 & t >= 0){
                    scrollDown = true;
                    scrollUp = false;
                    onDetectScrollListener.onDownScroll();
                }

            }
            //scroll up
            else if(t < oldt & diff > 0){
                if(!scrollUp){
                    scrollUp = true;
                    scrollDown = false;
                    onDetectScrollListener.onUpScroll();
                }
            }
        }
    }
}

1 个答案:

答案 0 :(得分:1)

我在ScrollView没有太多经验,但你可以这样做:

如果您想要的是仅在50个像素之后开始滚动,您可以遵循以下逻辑:

bool scrolling = false;
int scrollX = -1;
int scrollY = -1;

protected void scroll(int x, int y)
{
    //View was not scrolling
    if (scrollX == -1)
    {
        //Save starting point
        scrollX = x;
    }
    //View keeps scrolling
    else
    {
        //User is touching 50 pixels left from starting point
        if (x -scrollX > 50)
        {
            scrolling = true;
        } else
        //User is touching 50 pixels right from starting point
        if (scrollX -x > 50)
        {
            scrolling = true;
        }
    }

    if (scrolling)
    {
        /* Your code */
    }
}

我不确定onScrollView上的l或t是x还是y(我从未接触过它),但你可以按照自己的方式实现它。

随意创建单独的变量以向左滚动和向右滚动(或向上/向下)。

请避免使用像素,尤其是输入。更喜欢使用与密度无关的像素(dp)。更多信息here (Supporting Multiple Screens