我一直在寻找解决方案,因为太久了,我觉得卡住了。所以我决定在stackoverflow上写我的第一篇文章:)
我正在尝试在 android 4.0 及更高版本中为我的应用程序做一个 CoverFlow,经过一些研究后,我决定用ViewPager
、 增加OffscreenPageLimit
、 并为PageTransformer
效果设置负边距和奖金。
所以我的错误是关于 z-index 当边距太负时一个图像覆盖另一个图像,因为绘图顺序,左边的图像在顶部,它一点也不漂亮。
请参阅此处的错误-> http://img33.imageshack.us/img33/2448/r1l1.jpg
因此,经过一些研究,解决方案似乎是覆盖getChildDrawingOrder
我ViewPager
课堂上的方法。我是这样做的:
private void setChildDrawingOrder() {
int count = getChildCount();
positions = new SparseIntArray(count);
for (int i=0, j=0 ; i<count ; i++) {
if (i == position) {
positions.put(count-1, i);
} else {
j++;
positions.put(count-1-j, i);
}
}
mNeedsToSetChildDrawingOrder = false;
}
@Override
protected int getChildDrawingOrder(int childCount, int i) {
if(i == 0 && mNeedsToSetChildDrawingOrder) setChildDrawingOrder();
return positions.get(i);
}
其中位置是一个SparseIntArray
,顶部的项目获得更高的值(childCount-1)。我将它填充到onPageSelected
(方法实现OnPageChangeListener
在我的ViewPager
)中以获得我希望它位于顶部的项目的位置。
@Override
public void onPageSelected(int position) {
if (lastPosition != position) {
lastPosition = position;
ViewPager viewPager = ((MainActivity)mAdapterContext).getViewPager();
viewPager.setPosition(position);
}
}
我看不出我的错误在哪里!我也尝试了一些bringChildToFront
没有onPageSelected
任何成功的东西,可能是因为在调用PageTransformer
之后重绘了所有内容。onPageSelected
任何想法 ?
谢谢
编辑 15/10/13 :我编辑我的代码,因为我没有掌握该方法的作用!它是“获取要为该迭代绘制的子元素的索引”。而不是“我什么时候应该画孩子我?” (感谢这篇文章)
我也有一些 NullPointerException`,因为计数不是每次都相同,所以我将它移到我的 ViewPager 中。
它好多了,但仍然有一些绘图错误!我的职位SparseIntArray
看起来不错,所以我不明白。好像是随机出现的。。。