2

アクティビティのonPrepareOptionsMenu内にoptionsmenu-iconを取得し、キャンバスを使用して再描画しようとしています。

    @Override
    public boolean onPrepareOptionsMenu(Menu menu) {
    super.onPrepareOptionsMenu(menu);

      MenuItem item = menu.findItem(R.id.menuCart);

      Drawable icon = item.getIcon();
      Bitmap bitmap = Bitmap.createBitmap(icon.getIntrinsicWidth(),
               icon.getIntrinsicHeight(),
               Bitmap.Config.ARGB_8888);
      Canvas c = new Canvas(bitmap);
      c.drawColor(Color.BLUE);
      Paint paint = new Paint();
      paint.setColor(Color.WHITE);
      paint.setAntiAlias(true);
      paint.setStyle(Style.FILL_AND_STROKE);
      c.drawCircle(5, 5, 50, paint);
      icon.draw(c);
      icon.invalidateSelf();
      item.setIcon(icon);

      return true;
}

残念ながら何も起きていません。メニューには以前と同じアイコン画像があります。誰かが私が使用しているコードの何が問題になっているのか教えてもらえますか?

4

2 に答える 2

0

次の 2 行で:

c.drawCircle(5, 5, 50, ペイント);
icon.draw(c);

最初に円を描画し、次にビットマップ「ビットマップ」から派生した Cavas c にアイコンを描画しているため、新しいグラフィックスは「ビットマップ」になり、新しいアイコンとして設定する必要があります。これを試して:

item.setIcon(新しい BitmapDrawable(ビッ​​トマップ));

于 2011-05-31T20:45:46.353 に答える
0

new BitmapDrawable(bitmap) は非推奨です。

新しい BitmapDrawable(getResources(), bitmap)) に更新

于 2016-05-17T10:47:41.687 に答える