1

0から255の間のアルファ値を持つ2つの異なるビットマップのオーバーラップから得られた結果のビットマップを「計算」する必要があります。ビットマップはリソースからではなく動的にロードされるため、xmlではなくJavaコードでこれを行う必要があります。

これが私の最初の試みです(これは常に黒いビットマップを生成します...):

private Drawable composeBitmaps(int alpha1, BitmapDrawable bm1, 
                                int alpha2, BitmapDrawable bm2)
{
  Canvas c = new Canvas();
  Bitmap b1 = bm1.getBitmap();
  BitmapDrawable draw1 = new BitmapDrawable(b1.copy(b1.getConfig(), true));
  draw1.setAlpha(alpha1);
  c.setBitmap(draw1.getBitmap());

  Paint p = new Paint();
  p.setAlpha(alpha2);
  c.drawBitmap(bm2.getBitmap(), 0, 0, p);

  return draw1;
}

...

  View v = // whatever
  v.setBackgroundDrawable(composeBitmaps(100, bdrawable1, 150, bdrawable2));

そして、ビューは黒の背景になります。私は何が間違っているのですか?

4

1 に答える 1

0

上記の私のコードは絶対に正しいです。ビットマップを黒くするバグは他の場所にありました。それを見つけて修正しました。今では動作します。

注意すべき唯一のことは、私のコードは地獄のように遅く、妥当なfpsレートで2つのフルスクリーンビットマップをクロスフェードするために使用できないことです。

于 2012-06-30T08:14:51.603 に答える