0

H&M Android アプリを見て、ウィジェットを実装する方法を見つけようとしました。この画像フレームがどのように実装されているか、誰にもわかりますか? 私はそれがopenGLを使用していると推測できます。

https://lh6.ggpht.com/Q-WH9L6rIIPEaEpp2ty0uXH7VqDbVqE_0x2f22o4cjvCHsVm-lTDtfqRkGWRRzywnas

4

2 に答える 2

1

透明なpngフレーム?これも9パッチである可能性があります!

于 2013-02-04T00:01:06.003 に答える
1

勝手に推測してみます(;_;)

まず正面の画像を作成します。この場合、ImageView と TextView を使用して線形レイアウトを拡張することによって構築されます。次に、これがビットマップにキャッシュされます (描画時ではなくセットアップ段階で)。

onDraw では、そのビットマップが画面に描画されます。次に、その領域をそれ以上描画しないようにキャンバスが切り取られます。透明ピクセルの 4 倍のオーバードローを行わないように、描画時間を大幅に節約します。

次に、背景は次のように描画されます。

        for(int i = NUMBER_OF_LAYERS - 1; i > 0; i--) {
            canvas.save();
            float rotation = MAX_ANGLE * shiftModifier * ((float) i / (NUMBER_OF_LAYERS - 1));
            canvas.rotate(rotation, mImageHalfWidth, mImageHalfHeight);
            paint.setAlpha((int) (255f / (2 * i)));
            canvas.drawRect(mBitmap.getBounds(), paint);
            canvas.restore();
        }

NUMBER_OF_LAYERS は背景レイヤーの数です。

MAX_ANGLE は、最も傾いたレイヤーの回転角度です。

shiftModifier は、背景レイヤーをアニメーション化するために使用されます。ゼロ (背景が完全に非表示) から 1 (背景角度 = MAX_ANGLE) に移動します。

paint は、色が白に設定された Paint です。

于 2013-02-06T10:58:36.043 に答える