Как перерисовать опцию-иконку с холстом
Я пытаюсь получить optionmenu-icon внутри onPrepareOptionsMenu в своей Activity и перерисовать его с помощью 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;
}
К сожалению, ничего не происходит. В меню есть та же иконка-картинка, что и раньше. Может кто-нибудь сказать мне, что не так с кодом, который я использую?
2 ответа
Решение
В этих двух строках:
c.drawCircle (5, 5, 50, краска);
icon.draw (с);
сначала вы рисуете кружок, а затем значок в Cavas c, который получен из растрового изображения "растровое изображение", следовательно, ваша новая графика теперь находится в "растровом изображении", которое следует установить в качестве нового значка. Попробуй это:
item.setIcon (new BitmapDrawable (bitmap));
new BitmapDrawable(bitmap) устарела.
Обновлено до нового BitmapDrawable(getResources(), bitmap))