Как получить ссылку на верх и низ холста для динамического позиционирования? - PullRequest
0 голосов
/ 27 февраля 2019

У меня есть 2 TextViews поверх ImageView.Я использую классы Canvas и Paint, чтобы нарисовать надписи на картинке.Я хочу, чтобы заголовки имели промежуток между верхней частью изображения и верхней частью TextView около 20 dp.Как можно получить эти значения для ввода значения y Canvas.drawText()?

Ответы [ 2 ]

0 голосов
/ 27 февраля 2019

Вы можете перейти по этой ссылке https://developer.android.com/training/custom-views/custom-drawing#java. Содержит подробное описание позиционирования.В вашем случае,

, вам сначала нужно создать текст

 textPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
   textPaint.setColor(textColor);
   if (textHeight == 0) {
       textHeight = textPaint.getTextSize();
   } else {
       textPaint.setTextSize(textHeight);
   }

   piePaint = new Paint(Paint.ANTI_ALIAS_FLAG);
   piePaint.setStyle(Paint.Style.FILL);
   piePaint.setTextSize(textHeight);

   shadowPaint = new Paint(0);
   shadowPaint.setColor(0xff101010);
   shadowPaint.setMaskFilter(new BlurMaskFilter(8, BlurMaskFilter.Blur.NORMAL));

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

// Account for padding
float xpad = (float)(getPaddingLeft() + getPaddingRight());
float ypad = (float)(getPaddingTop() + getPaddingBottom());

// Account for the label
if (showText) xpad += textWidth;

float ww = (float)w - xpad;
float hh = (float)h - ypad;

// Figure out how big we can make the pie.
float diameter = Math.min(ww, hh);

Я получил весь этот код с вышеупомянутого URL.

Вам необходимо добавить приведенный ниже код для позиционирования по центру

 Paint yourPaint = new Paint();

  int xP = (canvas.getWidth() / 2);
  int yP = (int) ((canvas.getHeight() / 2) - ((yourPaint .descent()yourPaint .ascent()) / 2)) ;

        canvas.drawText(yourTextView, xP, yP, yourPaint);
0 голосов
/ 27 февраля 2019

Источник текста похож на изображение, он начинается слева сверху, для верхнего текста просто установите начало координат y на + 20dp, для нижнего текста установите источник текста y на text.height + 20dp

Центральный текст:

x = image.width/2 - text.width/2;

Верхний текст по оси Y

y = 20;

Нижний текст по оси Y:

y = image.height - 20 - text.height;

Важно, чтобы вы измерили текст, прежде чем пытаться получитьширина нарисованного текста.

Проверьте этот ответ: Измерение высоты текста для рисования на холсте (Android)

...