android - 如何使用 Canvas 重绘选项菜单图标

标签 android icons android-canvas draw options-menu

我试图在我的 Activity 中的 onPrepareOptionsMenu 中获取一个选项菜单图标,并在 Canvas 的帮助下重绘它:

    @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;
}

不幸的是什么都没有发生。菜单中有与以前相同的图标图像。 有人可以告诉我我使用的代码有什么问题吗?

最佳答案

在这两行中:

c.drawCircle(5, 5, 50, paint);
icon.draw(c);

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

item.setIcon(new BitmapDrawable(bitmap));

关于android - 如何使用 Canvas 重绘选项菜单图标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6192599/

相关文章:

android - 如何在 Android 上执行类似 AffineTransform.transform 的操作?

java - F 点与 X 成 90 度

android - ArrayAdapter 正在为 ListView 中的每个项目重复 UI Header

android - 通过 Android(pre-2.0)访问 Google 帐户 ID/用户名

android - 用于在 iOS 和 Android 锁屏上显示音频信息和控件的 Cordova 插件

html - 列表项文本在图标下不断换行

java - JTree设置Icon的透明度

c++ - 如何使用 Visual Studio 在 Windows 应用程序中设置图标

Android:如何将监听器添加到硬件菜单按钮?

Android 剪辑 canvas.drawBitmap