首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >有没有办法识别滚动视图在android中向上或向下滚动?

有没有办法识别滚动视图在android中向上或向下滚动?
EN

Stack Overflow用户
提问于 2015-01-09 20:24:17
回答 4查看 9.8K关注 0票数 5

嘿,我只是想知道在android .Wanted中滚动视图是向上还是向下滚动,以便在向上和向下滚动时执行不同的操作。

任何想法都很受欢迎,谢谢

EN

回答 4

Stack Overflow用户

发布于 2016-02-12 22:51:56

尝试一下:扩展Scrollview并重写onTouchEvent方法

代码语言:javascript
运行
复制
private float mTouchPosition;
private float mReleasePosition;

@Override
public boolean onTouchEvent(MotionEvent event) {

    if (event.getAction() == MotionEvent.ACTION_DOWN) {
        mTouchPosition = event.getY();
    }
    if (event.getAction() == MotionEvent.ACTION_UP) {
        mReleasePosition = event.getY();

        if (mTouchPosition - mReleasePosition > 0) {
            // user scroll down
        } else {
            //user scroll up
        }
    }
    return super.onTouchEvent(event);
}
票数 7
EN

Stack Overflow用户

发布于 2019-06-26 21:22:13

试试这个,它对我很管用

代码语言:javascript
运行
复制
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        scrollView.setOnScrollChangeListener(new View.OnScrollChangeListener() {
            @Override
            public void onScrollChange(View v, int scrollX, int scrollY, int oldScrollX, int oldScrollY) {
                 if(scrollY<=oldScrollY)
                {
                    //scroll up
                    relativeLayout.setVisibility(View.VISIBLE);
                }
                else {
                relativeLayout.setVisibility(View.GONE);}
            }
        });
    }
票数 6
EN

Stack Overflow用户

发布于 2017-11-12 14:54:23

是的,你可以用这个

代码语言:javascript
运行
复制
scrollView.setOnScrollChangeListener(new View.OnScrollChangeListener() {
        @Override
        public void onScrollChange(View v, int scrollX, int scrollY, int oldScrollX, int oldScrollY) {

        }
    }); 

但这要求minSdkVersion必须是23岁。因此,您可以将minSdkVersion更改为23,或者创建一个自定义滚动视图,如下所示:

代码语言:javascript
运行
复制
public class TouchDetectableScrollView extends ScrollView  {

OnMyScrollChangeListener myScrollChangeListener;

public TouchDetectableScrollView(Context context) {
    super(context);
}

public TouchDetectableScrollView(Context context, AttributeSet attrs) {
    super(context, attrs);
}

public TouchDetectableScrollView(Context context, AttributeSet attrs, int defStyleAttr) {
    super(context, attrs, defStyleAttr);
}

@Override
protected void onScrollChanged(int l, int t, int oldl, int oldt) {
    super.onScrollChanged(l, t, oldl, oldt);

    if (myScrollChangeListener!=null)
    {
        if (t>oldt)
        {
            myScrollChangeListener.onScrollDown();
        }
        else if (t<oldt){
            myScrollChangeListener.onScrollUp();
        }

    }
}

public OnMyScrollChangeListener getMyScrollChangeListener() {
    return myScrollChangeListener;
}

public void setMyScrollChangeListener(OnMyScrollChangeListener myScrollChangeListener) {
    this.myScrollChangeListener = myScrollChangeListener;
}

public interface OnMyScrollChangeListener
{
        public void onScrollUp();
        public void onScrollDown();
}}

在xml和java代码中使用TouchDetectableScrollView,然后像这样设置listener:

代码语言:javascript
运行
复制
scrollView.setMyScrollChangeListener(new TouchDetectableScrollView.OnMyScrollChangeListener() {
        @Override
        public void onScrollUp() {
            //Toast.makeText(getActivity(), "Scrolling up", Toast.LENGTH_SHORT).show();
            Log.d("scroll","up");

        }

        @Override
        public void onScrollDown() {
           // Toast.makeText(getActivity(), "Scrolling down", Toast.LENGTH_SHORT).show();
            Log.d("scroll","down");

        }
    });
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27860529

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档