14

android 1.6または2でこのようなリストビューを作成する方法(renderscriptは3以降でのみ機能しますが、ほとんどすべてのandroidで機能するにはリストが必要です):

ここに画像の説明を入力してください

4

1 に答える 1

9

Camera.setTranslate(x, 0, z)drawChild で使用し、回転仮想化のために x 位置を変更し、オーバーラップのために z 位置を変更しました。次に、最後のアイテムが一番上にあり、最初が一番下のレイヤーにあるため、オーバーラップに問題がありました。そのため、onCreate()呼び出されthis.setChildrenDrawingOrderEnabled(true)てオーバーライドされたメソッドprotected int getChildDrawingOrder (int childCount, int i) {}で、中間行とそれ以降の行の順序を変更できました。このアイデアは、レナードによって与えられました。レナードは、ここでほぼ同じことについて他の私の投稿で私に提案しました。

私の getChildDrawingOrder(int, int) 実装をオーバーラップさせるには、次のものが必要です。

@Override
protected int getChildDrawingOrder (int childCount, int i) {
    int centerChild = 0;
    //find center row
    if ((childCount % 2) == 0) { //even childCount number
        centerChild = childCount / 2; // if childCount 8 (actualy 0 - 7), then 4 and 4-1 = 3 is in centre.      
        int otherCenterChild = centerChild - 1;
        //Which more in center?
        View child = this.getChildAt(centerChild);
        final int top = child.getTop();
        final int bottom = child.getBottom();
        //if this row goes through center then this
        final int absParentCenterY = getTop() + getHeight() / 2;
        //Log.i("even", i + " from " + (childCount - 1) + ", while centerChild = " + centerChild);
        if ((top < absParentCenterY) && (bottom > absParentCenterY)) {
            //this child is in center line, so it is last
            //centerChild is in center, no need to change
        } else {
            centerChild = otherCenterChild;
        }
    }
    else {//not even - done
        centerChild = childCount / 2;
        //Log.i("not even", i + " from " + (childCount - 1) + ", while centerChild = " + centerChild);
    }

    int rez = i;
    //find drawIndex by centerChild
    if (i > centerChild) {
        //below center
        rez = (childCount - 1) - i + centerChild;
    } else if (i == centerChild) {
        //center row
        //draw it last
        rez = childCount - 1;
    } else {
        //above center - draw as always
        // i < centerChild
        rez = i;
    }
    //Log.i("return", "" + rez);
    return rez;

}

この投稿が将来誰かに役立つことを願っています

スクリーンショットは、実際には質問で述べたものとほぼ同じです。私はアルファを使用したので、オーバーレイされたアイテムは少し透けて見えます:

ここに画像の説明を入力

于 2012-04-23T10:15:33.897 に答える