android - добавление строки поверх изображения Drawable?

Я пытаюсь добавить String к изображению Drawable. В настоящее время я не использую Panel для рисования, и я бы хотел, чтобы так и оставалось. Любые идеи или мне нужно вызвать метод onDraw()?

Мое изображение отображается с этим кодом:

Drawable image = getResources().getDrawable(tile_types[tileType]);      
setImageDrawable(image);

Я бы хотел добавить String к этому изображению.

Спасибо.


person Dan    schedule 19.05.2011    source источник


Ответы (2)


Ответ Сэма был моей отправной точкой, но изображение не появилось, только текст (я использую его на карте Google). Наконец-то я заработал с LayerDrawable. Вот мое решение:

private Drawable createMarkerIcon(Drawable backgroundImage, String text,
                                  int width, int height) {

  Bitmap canvasBitmap = Bitmap.createBitmap(width, height, 
                                            Bitmap.Config.ARGB_8888);
  // Create a canvas, that will draw on to canvasBitmap.
  Canvas imageCanvas = new Canvas(canvasBitmap);

  // Set up the paint for use with our Canvas
  Paint imagePaint = new Paint();
  imagePaint.setTextAlign(Align.CENTER);
  imagePaint.setTextSize(16f);

  // Draw the image to our canvas
  backgroundImage.draw(imageCanvas);

  // Draw the text on top of our image
  imageCanvas.drawText(text, width / 2, height / 2, imagePaint);

  // Combine background and text to a LayerDrawable
  LayerDrawable layerDrawable = new LayerDrawable(
             new Drawable[]{backgroundImage, new BitmapDrawable(canvasBitmap)});
  return layerDrawable;
}
person Matt Handy    schedule 29.11.2012
comment
Вы знаете, как это сделать с помощью 9-канального рисунка, чтобы он мог принимать размер текста? - person Tsunaze; 03.07.2013
comment
как бы вы это сделали, поскольку BitmapDrawable устарел?!? - person M4tchB0X3r; 12.09.2013
comment
Вы знаете, почему изображение не появилось с ответом Сэма? - person pptang; 29.09.2015
comment
В качестве плюса добавьте imagePaint.setAntiAlias(true); для того, чтобы сделать текст гладким - person Emre Koç; 17.08.2016

Если полученный текст выглядит «угловатым» из-за изменения размера, лучше использовать TextPaint вместо простого Paint со следующими параметрами:

TextPaint textPaint = new TextPaint(TextPaint.ANTI_ALIAS_FLAG | TextPaint.LINEAR_TEXT_FLAG);
person Dmide    schedule 08.09.2014