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

时间:2017-03-17 15:33:48

标签: android scrollview

在我的应用程序中,由于ViewTreeObserver类,我有一个ScrollView可以监听Scroll Changes。

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

但是,该类侦听全局滚动更改,并且我有3个ScrollViews。因此,主ScrollView被激活并执行计算并导致一切都出错。

有没有办法忽略其他ScrollViews并且只针对主要的ScrollViews?

1 个答案:

答案 0 :(得分:0)

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

如果它们不同,则会调用正确的scrollview。如果它们相同,则调用错误的scrollview,因此忽略它。

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