2

ビットマップを分離したまま、既存のビットマップの上に何かを描画したいと思います。そのため、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) をコメントアウトすると、背景画像が表示されます。

ここで何が欠けていますか?

4

1 に答える 1

2

あなたの背景は間違っています。変化する

ImageView mask = (ImageView) findViewById(R.id.photo_mask);
image.setImageBitmap(mMaskBitmap);

ImageView mask = (ImageView) findViewById(R.id.photo_mask);
mask.setImageBitmap(mMaskBitmap);
于 2012-12-23T08:26:00.783 に答える