カスタム 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" />
...