ビットマップを分離したまま、既存のビットマップの上に何かを描画したいと思います。そのため、RelativeLayout と 2 つの ImageView を互いに積み重ねて、上に描画するビットマップを保持し、下に背景画像付きのビットマップを保持するという考え方です。
layout.xml (該当部分のみ)
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<ImageView
android:id="@+id/photo_mask"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@android:color/transparent" />
<ImageView
android:id="@+id/photo"
android:layout_width="fill_parent"
android:layout_height="fill_parent" />
layout.java (該当部分のみ)
setContentView(R.layout.layout);
ImageView image = (ImageView) findViewById(R.id.photo);
image.setImageBitmap(mSomeImage);
mMaskPaint = new Paint();
mMaskPaint.setColor(0xFF0000);
mMaskPaint.setAlpha(128);
mMaskBitmap = Bitmap.createBitmap(128, 128, Bitmap.Config.ARGB_8888);
mMaskBitmap.eraseColor(Color.TRANSPARENT);
mMaskCanvas = new Canvas(mMaskBitmap);
mMaskCanvas.drawCircle(64, 64, 10, mMaskPaint);
ImageView mask = (ImageView) findViewById(R.id.photo_mask);
image.setImageBitmap(mMaskBitmap);
mSomeImage は 128x128 のビットマップであるため、マスクのビットマップと一致することに注意してください。マスクのビットマップの真ん中に赤い円を描いていますが、これは完全に表示されています。ただし、マスク Bitmap は背景画像を表示せず、代わりに黒い背景を表示します。
だから私は試しました:
- ImageView の背景色を透明に設定する
- .eraseColor を使用してマスク ビットマップのピクセルを透明に設定する
- ビットマップ構成を ARGB_8888 に設定する
- マスク ImageView のアルファを設定する
どれも機能していないようです。eraseColor(Color.BLUE) を実行すると、背景が青色になり、中央に赤い円が表示されます。マスク ImageView のアルファを設定すると、背景はまだ黒です。setImageBitmap(mMaskBitmap) をコメントアウトすると、背景画像が表示されます。
ここで何が欠けていますか?