Android - добавить строку поверх рисованного изображения? - PullRequest
5 голосов
/ 20 мая 2011

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

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

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

Я хотел бы добавить String поверх этогоизображение.

Спасибо.

Ответы [ 4 ]

17 голосов
/ 29 ноября 2012

Ответ Сэма был моей отправной точкой, но изображение не отображалось, только текст (я использую его на карте 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;
}
6 голосов
/ 20 мая 2011
Drawable image = getResources().getDrawable(tile_types[tileType]);
// Store our image size as a constant
final int IMAGE_WIDTH = image.getIntrinsicWidth();
final int IMAGE_HEIGHT = image.getIntrinsicHeight();

// You can also use Config.ARGB_4444 to conserve memory or ARGB_565 if 
// you don't have any transparency.
Bitmap canvasBitmap = Bitmap.createBitmap(IMAGE_WIDTH, 
                                          IMAGE_HEIGHT, 
                                          Bitmap.Config.ARGB_8888);
// Create a canvas, that will draw on to canvasBitmap. canvasBitmap is
// currently blank.
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
image.draw(imageCanvas);
// Draw the text on top of our image
imageCanvas.drawText("Sample Text", 
                         IMAGE_WIDTH / 2, 
                         IMAGE_HEIGHT / 2, 
                         imagePaint);
// This is the final image that you can use 
BitmapDrawable finalImage = new BitmapDrawable(canvasBitmap);
1 голос
/ 08 сентября 2014

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

TextPaint textPaint = new TextPaint(TextPaint.ANTI_ALIAS_FLAG | TextPaint.LINEAR_TEXT_FLAG);
0 голосов
/ 20 мая 2011
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...