2

我正在尝试在我的活动中的 onPrepareOptionsMenu 中获取一个选项菜单图标,并在画布的帮助下重新绘制它:

    @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

在这两行中:

c.drawCircle(5, 5, 50, 油漆);
图标.draw(c);

您首先绘制一个圆圈,然后将图标绘制到 Cavas c 中,这是从位图“位图”派生的,因此您的新图形现在位于“位图”中,应将其设置为新图标。试试这个:

item.setIcon(new BitmapDrawable(bitmap));

于 2011-05-31T20:45:46.353 回答
0

不推荐使用新的 BitmapDrawable(bitmap)。

更新到新的 BitmapDrawable(getResources(), bitmap))

于 2016-05-17T10:47:41.687 回答