4

私はあまりにも長い間解決策を探していましたが、立ち往生しています。それで、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 OnPageChangeListenermy ViewPager) に入力して、一番上にしたいアイテムの位置を取得します。

@Override
public void onPageSelected(int position) {
    if (lastPosition != position) {
        lastPosition = position;
        ViewPager viewPager = ((MainActivity)mAdapterContext).getViewPager();
        viewPager.setPosition(position);
    }
}

どこが間違っているのかわからない!おそらく、 が呼び出された後bringChildToFrontのすべてを再描画するためです。onPageSelectedPageTransformeronPageSelected

何か案が ?

ありがとう

EDIT 15/10/13 : メソッドが何をしているのかわからなかったため、コードを編集しました。それは、「その反復のために描画する子のインデックスを取得すること」です。「いつ子供を描くべきですか?」ではありません。(この投稿へのthx )

カウントが毎回同じではないため、NullPointerException`もいくつかあったので、ViewPagerに移動しました。

かなり良くなりましたが、まだ描画バグがあります! ポジションSparseIntArrayが良さそうでよくわかりません。なんかランダムに出てくるような…

4

0 に答える 0