1. ホーム
  2. android

[解決済み] アンドロイドで2つの画像を重ね合わせ、イメージビューを設定する

2023-01-12 17:26:02

質問

私のアプリで2つの画像を重ね合わせようとしているのですが、私の canvas.setBitmap() 行でクラッシュするようです。私は何を間違えているのでしょうか?

private void test() {
    Bitmap mBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.t);
    Bitmap mBitmap2 = BitmapFactory.decodeResource(getResources(), R.drawable.tt);
    Bitmap bmOverlay = Bitmap.createBitmap(mBitmap.getWidth(), mBitmap.getHeight(), mBitmap.getConfig());
    Canvas canvas = new Canvas();
    canvas.setBitmap(bmOverlay);
    canvas.drawBitmap(mBitmap, new Matrix(), null);
    canvas.drawBitmap(mBitmap2, new Matrix(), null);
    testimage.setImageBitmap(bmOverlay);
}

どのように解決するのですか?

複雑なCanvasの操作を省略して、Drawableで完全に行うことができます。 LayerDrawable . 選択肢は2つあります。どちらかです。 で定義する。 で定義し、単に画像を設定するか、あるいは LayerDrawable をコードで動的に構成することもできます。

解決策1 (XML経由)。

新しい描画可能な XML ファイルを作成します。 layer.xml :

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/t" />
    <item android:drawable="@drawable/tt" />
</layer-list>

では、そのDrawableを使って画像を設定します。

testimage.setImageDrawable(getResources().getDrawable(R.layout.layer));

解決策その2(動的)。

Resources r = getResources();
Drawable[] layers = new Drawable[2];
layers[0] = r.getDrawable(R.drawable.t);
layers[1] = r.getDrawable(R.drawable.tt);
LayerDrawable layerDrawable = new LayerDrawable(layers);
testimage.setImageDrawable(layerDrawable);

(このコードをテストしていないので、間違いがあるかもしれませんが、この大枠はうまくいくはずです)