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