私はあまりにも長い間解決策を探していましたが、立ち往生しています。それで、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
(method implement with on OnPageChangeListener
my ViewPager
) に入力して、一番上にしたいアイテムの位置を取得します。
@Override
public void onPageSelected(int position) {
if (lastPosition != position) {
lastPosition = position;
ViewPager viewPager = ((MainActivity)mAdapterContext).getViewPager();
viewPager.setPosition(position);
}
}
どこが間違っているのかわからない!おそらく、 が呼び出された後bringChildToFront
のすべてを再描画するためです。onPageSelected
PageTransformer
onPageSelected
何か案が ?
ありがとう
EDIT 15/10/13 : メソッドが何をしているのかわからなかったため、コードを編集しました。それは、「その反復のために描画する子のインデックスを取得すること」です。「いつ子供を描くべきですか?」ではありません。(この投稿へのthx )
カウントが毎回同じではないため、NullPointerException`もいくつかあったので、ViewPagerに移動しました。
かなり良くなりましたが、まだ描画バグがあります! ポジションSparseIntArray
が良さそうでよくわかりません。なんかランダムに出てくるような…