android - 如何在 ScrollView 中设置 onScrollStop 事件

标签 android android-layout

我正在开发一个新闻阅读器类型的 android 应用程序,我想在用户开始滚动新闻列表时清除我的自定义页眉和页脚栏。当用户停止滚动新闻时,这些栏应该再次出现。这样我可以为用户提供更多阅读新闻的空间。但问题是,我找不到一种方法来触发像 onScrollStop 或 onScrollStart 这样的事件。 请帮忙。

最佳答案

在我的项目中,我不得不拦截滚动的末尾,所以我实现了我自己的 ScrollListener:

public class VerticalScrollLayout extends ScrollView {
    private GestureDetector gdScrolling;
    private boolean isScrolling;

    private OnScrollListener lOnScroll;

    public VerticalScrollLayout(Context context) {
        super(context);
        setVerticalScrollBarEnabled(false);

        gdScrolling = new GestureDetector(new SimpleOnGestureListener() {
            @Override
            public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
                isScrolling = true;
                return false;
            }

            @Override
            public boolean onDown(MotionEvent e) {
                return true;
            }
        });

        setOnTouchListener(new OnTouchListener() {
            public boolean onTouch(View v, MotionEvent event) {
                if (gdScrolling.onTouchEvent(event)) {
                    return false;
                }

                if(event.getAction() == MotionEvent.ACTION_UP) {
                    if(isScrolling ) {
                        isScrolling  = false;
                        if(lOnScroll != null) {
                            lOnScroll.onScrollEnded();
                        }
                    }
                }

                return false;
            }
        });
    }

    public void setOnScrollListener(OnScrollListener l) {
        lOnScroll = l;
    }

    @Override
    protected void onScrollChanged(int x, int y, int oldx, int oldy) {
        super.onScrollChanged(x, y, oldx, oldy);
        if(lOnScroll != null) {
            lOnScroll.onScrollChanged(x, y, oldx, oldy);
        }
    }

    public interface OnScrollListener {
        void onScrollChanged(int x, int y, int oldx, int oldy);
        void onScrollEnded();
    }
}

这可能不是最佳做法,但效果很好。

关于android - 如何在 ScrollView 中设置 onScrollStop 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9095946/

相关文章:

android - 使用 gradle 导入模块时使用模块的 packackingOptions

java - 将 Constraintlayout 更改为 LinearLayout

android - 如何以编程方式在 NestedScrollView 中显示滚动条。

java - 如何将 TextView 置于父 ImageView 的中心?

android - 协调器布局与 viewpager 与 recyclerview 作为适配器

Java 未与 Eclipse 一起运行,编辑 eclipse.ini 时出现错误

java - 将当前时间(以毫秒为单位)与共享首选项中保存的时间进行比较

java - adMob XML :The following classes could not be instantiated: - com. google.android.gms.ads.AdView

java - 没有适合 makeText() 的方法 - Toast (Android)

android - Cardview 突然停止显示阴影