如何用画布重画选项菜单图标

问题描述

| 我试图在我的Activity中的onPrepareOptionsMenu内获取一个optionsmenu-icon,并借助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,油漆);   icon.draw(c); 您首先绘制一个圆圈,然后将图标绘制到Cavas c中,该图标派生自Bitmap \'bitmap \',因此新图形现在位于\'bitmap \'中,应将其设置为新图标。 尝试这个:   item.setIcon(新的BitmapDrawable(位图));     ,        不推荐使用新的BitmapDrawable(bitmap)。 更新为新的BitmapDrawable(getResources(),位图)     

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...