Android: 如果不是由特定的 ScrollView 完成,我如何忽略滚动更改?

Android: how can I ignore scrolling changes if not done by a specific ScrollView?

在我的应用程序中,由于 ViewTreeObserver class,我有一个监听滚动变化的 ScrollView。

scrollView.getViewTreeObserver().addOnScrollChangedListener(new ViewTreeObserver.OnScrollChangedListener() {
            @Override
            public void onScrollChanged() {
                // I want to directly target this scrollview changes 
                // if specific scrollview { do calculations }
            }
        });

然而,class 监听全局滚动变化,我有 3 个 ScrollView。因此,主 ScrollView 被激活并执行计算并导致一切出错。

有没有办法忽略其他 ScrollView 只针对主要 ScrollView?

你可以做些什么来克服它,将 getScrollX() 值(如果是水平滚动视图)或 getScrollY() 值(如果是垂直滚动视图)存储在某个 int 中,并且每次触发 onScrollChanged() 时,只需检查如果新的滚动值与之前存储的不同。

如果它们不同,则调用了正确的滚动视图。如果它们相同,则调用了错误的滚动视图,因此请忽略它。

int prevScrollX_for1 = -1;
int prevScrollX_for2 = -1;

scrollView1.getViewTreeObserver().addOnScrollChangedListener(new ViewTreeObserver.OnScrollChangedListener() {
            @Override
            public void onScrollChanged() {
                // Assuming horizontal scrollview

                if(scrollView1.getScrollX() != prevScrollX_for1)
                {
                    // Do something
                }
                prevScrollX_for1 = getScrollX();
            }
        });
scrollView2.getViewTreeObserver().addOnScrollChangedListener(new ViewTreeObserver.OnScrollChangedListener() {
            @Override
            public void onScrollChanged() {
                // Assuming horizontal scrollview

                if(scrollView2.getScrollX() != prevScrollX_for2)
                {
                    // Do something
                }
                prevScrollX_for2 = getScrollX();
            }
        });