2016-09-09 5 views
-2

Я пытаюсь создать Прямоугольник вокруг текста, этот текст нарисован внутри холста. Также есть изображение внутри холста. Вот код для рисования текста внутри изображения, но я не могу получить позицию Прямоугольник вправо. Вот одна строка, где мне нужна помощь canvas.drawRect (HELLLLLLLLLLLLLPPPPPPPPPPPPPP);Как нарисовать прямоугольник вокруг текста внутри холста

> > public Bitmap drawTextOnBitmap(Context context, int resId, String 
> > text) { 
> >  // void drawRect(float left, float top, float right, float bottom, Paint paint) 
> >   // prepare canvas 
> >   int offset=10; 
> >   Resources resources = context.getResources(); 
> >   float scale = resources.getDisplayMetrics().density; 
> >   Bitmap bitmap = BitmapFactory.decodeResource(resources, resId); 
> > 
> >   android.graphics.Bitmap.Config bitmapConfig = bitmap.getConfig(); 
> >   // set default bitmap config if none 
> >   if (bitmapConfig == null) { 
> >    bitmapConfig = android.graphics.Bitmap.Config.ARGB_8888; 
> >   } 
> >   // resource bitmaps are immutable, so we need to convert it to mutable one 
> >   bitmap = bitmap.copy(bitmapConfig, true); 
> >   Canvas canvas = new Canvas(bitmap); 
> > 
> >   // new antialiased Paint 
> >   TextPaint paint = new TextPaint(Paint.ANTI_ALIAS_FLAG); 
> >   // text color - #3D3D3D 
> >   paint.setColor(Color.rgb(61, 61, 61)); 
> >   // text size in pixels 
> >   paint.setTextSize((int) (bitmap.getHeight()/10 * scale)); 
> >   // text shadow 
> >   paint.setShadowLayer(1f, 0f, 1f, Color.WHITE); 
> > 
> >   // set text width to canvas width minus 16dp padding 
> >   int textWidth = canvas.getWidth() - (int) (16 * scale); 
> > 
> >   // init StaticLayout for text 
> >   StaticLayout textLayout = new StaticLayout(text, paint, textWidth, 
> >     Layout.Alignment.ALIGN_CENTER, 1.0f, 0.0f, false); 
> > 
> >   // get height of multiline text 
> >   int textHeight = textLayout.getHeight(); 
> > 
> >   // get position of text's top left corner 
> >   float x = (bitmap.getWidth() - textWidth)/2; 
> >   float y = (bitmap.getHeight() - textHeight)/2; 
> >   Paint myPaint = new Paint(); 
> >   myPaint.setStyle(Paint.Style.STROKE); 
> >   myPaint.setColor(Color.rgb(0, 0, 0)); 
> >   myPaint.setStrokeWidth(10); 
> >   // draw text to the Canvas center 
> >   canvas.save(); 
> > 
> > 
> >   canvas.translate(x, y); 
> >   textLayout.draw(canvas); 
> >   canvas.drawRect(HELLLLLLLLLLLLPPPPPPPPPPPPPPPP); 
> >   canvas.restore(); 
> > 
> > 
> >   // void drawRect(float left, float top, float right, float bottom, Paint paint) 
> > 
> > 
> >   return bitmap; 
> >  } 

enter image description here

Это то, что я хочу достичь, и я застрял на создание прямоугольника в нужном месте

+0

@MobileDeveloper Вы бот? –

+1

А? Вы должны быть более конкретными, чтобы получить хорошие ответы. –

+0

@MobileDeveloper Я просто добавил более подробную информацию, вы можете понять это сейчас? –

ответ

2

флоат ш = myPaint.measureText (текст, 0, text.length ();

Используйте это и как ширина и высота и дать некоторые поля для reactangle

+1

Пожалуйста, просмотрите это, разработчик сделал Box вокруг текста с анимацией. Хотя https://github.com/hanks-zyh/HTextView – surya

0

enter image description here

использование paint.setStyle(Paint.Style.STROKE);

вместе с

Canvas.drawrect(); 

Это потянет полый прямоугольник.

Paint paint=new Paint(); 
    paint.setColor(Color.parseColor("#000000")); 
    paint.setStyle(Paint.Style.STROKE); 

Если вы не знаете, как DrawRect() работает, увидеть этот пост: https://stackoverflow.com/a/20919124/6265154

Смежные вопросы