android - adding a String over a Drawable image?

前端 未结 3 1567
猫巷女王i
猫巷女王i 2020-12-29 16:08

I\'m trying to add a String to a Drawable image. I\'m currently not using a Panel to draw and I\'d like to keep it that way. Any idea

相关标签:
3条回答
  • 2020-12-29 16:25

    If your resulted text looks "angular" due to resizing, it's better to use TextPaint instead of plain Paint with these parameters:

    TextPaint textPaint = new TextPaint(TextPaint.ANTI_ALIAS_FLAG | TextPaint.LINEAR_TEXT_FLAG);
    
    0 讨论(0)
  • 2020-12-29 16:26

    Sam's answer was my starting point, but the image didn't show up, only the text (I use it on a Google Map). Finally I got it working with a LayerDrawable. Here is my solution:

    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;
    }
    
    0 讨论(0)
  • 2020-12-29 16:39
    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);
    
    0 讨论(0)
提交回复
热议问题