目前,我有代码来检测不可见视图ScrollView
// This is code for class extends from ScrollView
@Override
public void onScrollChanged(int l, int t, int oldl, int oldt) {
super.onScrollChanged(l, t, oldl, oldt);
LinearLayout list = (LinearLayout)this.findViewById(R.id.card_container);
for (int i = 0; i < list.getChildCount(); ++i) {
View card = list.getChildAt(i);
list.getHitRect(mRect);
// If tag == 'false' and View is visible we know that
// View became visible during this scroll event.
if ((Boolean) card.getTag() == false
&& card.getLocalVisibleRect(mRect)) {
card.startAnimation(AnimationUtils.loadAnimation(getContext(),
R.anim.slide_up));
card.setTag(true);
}
}
}
模拟 Google+ 卡片动画行为。第一次可见的卡片将向上滑动,而用户向下滚动。
为了检查卡片在滚动视图中是否可见,我使用Androidcard.getLocalVisibleRect(mRect)
的以下技术:如何检查 ScrollView 内部的视图是否可见?
如果我的布局如下
<ScrollView>
<LinearLayout>
<LinearLayout card_container>
<Card />
<Card />
<Card />
<Card />
<Card />
</LinearLayout>
</LinearLayout>
</ScrollView>
根据上面的代码和布局,系统会知道我第一次向下滚动时,从第 4 个位置开始的卡片是不可见的。
但是,如果我在卡片顶部添加一些其他视图
<ScrollView>
<LinearLayout>
<LinearLayout button_container>
<Button />
<Button />
<Button />
</Linear>
<LinearLayout card_container>
<Card />
<Card />
<Card />
<Card />
<Card />
</LinearLayout>
</LinearLayout>
</ScrollView>
添加按钮容器后,我希望系统让我知道,从第二个位置开始的卡是不可见的(因为以前的一些空间被按钮容器占用)。
但是,系统仍然让我知道,从第 4 个位置开始的卡是不可见的。(这是不正确的)
有什么办法可以解决这个问题吗?