检测滚动视图是否到达顶部 - Android

9

我在我的Android应用程序中使用了scrollview,并且在activity_main.xml中使用。滚动功能完美地运作。 但是我需要添加一个回到顶部按钮,以便如果用户开始滚动,则应该像下面的链接一样可见按钮。

http://webdesignerwall.com/demo/scroll-to-top/scrolltotop.html?

我需要在Android中做这个。


我这里没有使用任何视图。 - Jessie Ka
尝试在按钮点击中使用 scroll_view.smoothScrollTo(0,0); - kgandroid
谢谢@kgandroid。但我需要在页面滚动时才能看到按钮。 - Jessie Ka
当用户向下滚动视图时,您必须玩转按钮的可见性和不可见性...单击该按钮时,请使用这些View.setVerticalScrollBarEnabled(true)。在此,View是scrollView的顶部视图。 - Ravindra Kushwaha
我正在做同样的事情。我的困惑是如何检测用户何时到达屏幕顶部,以便我可以使其不可见。 - Jessie Ka
显示剩余3条评论
3个回答

11

使用以下代码来检测滚动条的顶部。

final ViewTreeObserver.OnScrollChangedListener onScrollChangedListener = new
            ViewTreeObserver.OnScrollChangedListener() {

                @Override
                public void onScrollChanged() {
                    if (scrollview.getScrollY() == 0) {
                        swipeRefreshLayout.setEnabled(true);
                    } else
                        swipeRefreshLayout.setEnabled(false);
                }
            };
    scrollview.setOnTouchListener(new View.OnTouchListener() {
        private ViewTreeObserver observer;

        @Override
        public boolean onTouch(View v, MotionEvent event) {
            if (observer == null) {
                observer = scrollview.getViewTreeObserver();
                observer.addOnScrollChangedListener(onScrollChangedListener);
            } else if (!observer.isAlive()) {
                observer.removeOnScrollChangedListener(onScrollChangedListener);
                observer = scrollview.getViewTreeObserver();
                observer.addOnScrollChangedListener(onScrollChangedListener);
            }
            return false;
        }
    });

我可以问一下吗?观察者何时不再活跃? - Nguyen Tan Dat
我认为你应该在onTouch方法中返回true。顺便说一句,谢谢。 - Reza

9
 scrollView.getViewTreeObserver().addOnScrollChangedListener(new ViewTreeObserver.OnScrollChangedListener() {
            @Override
            public void onScrollChanged() {
                if (scrollView != null) {
                    if (scrollView.getScrollY()==0) {
                        Toast.makeText(getContext(),"top",Toast.LENGTH_SHORT).show();
                    } else {

                    }
                }
            }
        });

0

这可以用 Kotlin 这种方式完成

scrollView.scrollY == 0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接