在我的应用程序中,由于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?
答案 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();
}
});