0

カスタム ViewGroup 内に ImageView を配置しようとしています。Eclipse でグラフィカル レイアウトを使用すると、境界ボックスが必要な場所に配置されていることがわかりますが、画像自体は親の (0,0) のままです。

ImageView のメジャー関連またはレイアウト関連の呼び出しが欠落しているか、レイアウトの配置が間違っていますか? 画像をレイアウト境界から分離するにはどうすればよいですか?

これが私が説明していることのスクリーンショットです: http://dl.dropbox.com/u/13477196/gameboard.png

ViewGroup からのコード ビット:

public class GameViewGroup extends ViewGroup {
...
    @Override
    public void onLayout(boolean changed, int l, int t, int r, int b) {
        for (int col = 0; col < COLS; ++col) {
            for (int row = 0; row < ROWS; ++row) {
                ImageView image = (ImageView) findViewById(pieceId[col][row]);
                final Bitmap bitmap = ((BitmapDrawable) image.getDrawable()).getBitmap();

                final int imgLeft = l + (int) board.getVertexX(col) - (bitmap.getWidth() / 2);
                final int imgTop = t + (int) board.getVertexY(col, row) - (bitmap.getHeight() / 2);
                final int imgRight = imgLeft + bitmap.getWidth();
                final int imgBot = imgTop + bitmap.getHeight();

                image.layout(imgLeft, imgTop, imgRight, imgBot);
            }
        }
    }

    @Override
    protected void dispatchDraw(Canvas canvas) {
        // Draw the game board from cache
        canvas.drawBitmap(cachedBitmap, 0, 0, null);

        // Draw the pieces
        for (int col = 0; col < COLS; ++col) {
            for (int row = 0; row < ROWS; ++row) {
                ImageView image = (ImageView) findViewById(pieceId[col][row]);
                image.draw(canvas);
            }
        }
    }
...
}    

XML を使用して、ImageView をカスタム ViewGroup にアタッチします。

<?xml version="1.0" encoding="UTF-8"?>
<GameViewGroup 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/game_view"
    android:layout_height="fill_parent"
    android:layout_width="fill_parent" 
    tools:context=".GameActivity">

    <ImageView android:id="@+id/piece1"
        android:src="@drawable/piece"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:visibility="visible"
        android:contentDescription="@string/piece" />
...
4

1 に答える 1