簡體   English   中英

如何通過所需的像素值檢測ScrollView滾動

[英]How to detect ScrollView scroll by desired pixel value

我正在擴展ScrollView以檢測它是向上滾動還是向下滾動。 我想添加僅在滾動了50個像素時才檢測滾動的選項。 怎么做? 我當前的scrollview代碼覆蓋onScrollChanged:

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();
                }
            }
        }
    }
}

我沒有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 */
    }
}

我不確定l或t在您的onScrollView上是x還是y(我從未接觸過它),但是您可以按照自己的方式實現它。

隨意創建用於向左滾動和向右滾動(或向上/向下)的單獨變量。

請避免使用像素,尤其是對於輸入。 優先使用與密度無關的像素(dp)。 此處有更多信息(支持多屏幕)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM