#java #android #android-canvas #android-paint #staticlayout
#java #Android #android-canvas #android-paint #staticlayout
Вопрос:
Я пытаюсь создать пользовательский шрифт impact с белым цветом и черным контуром (он же «шрифт meme»). У меня есть 2 текста на обоих концах холста, но только один из них отражает изменения. Пока это то, что у меня есть:
Это мой код:
Canvas canvas = new Canvas(mutableBitmap);
TextPaint topFillPaint = new TextPaint();
TextPaint bottomFillPaint = new TextPaint();
TextPaint topStrokePaint = new TextPaint();
TextPaint bottomStrokePaint = new TextPaint();
Typeface typeface = getResources().getFont(R.font.impact);
topFillPaint.setColor(Color.WHITE);
topFillPaint.setTextSize(topTextView.getTextSize());
topFillPaint.setTypeface(typeface);
topStrokePaint.setStyle(Paint.Style.STROKE);
topStrokePaint.setStrokeWidth(8);
topStrokePaint.setColor(Color.BLACK);
topStrokePaint.setTextSize(topTextView.getTextSize());
topStrokePaint.setTypeface(typeface);
bottomFillPaint.setColor(Color.WHITE);
bottomFillPaint.setTextSize(bottomTextView.getTextSize());
bottomFillPaint.setTypeface(typeface);
bottomStrokePaint.setStyle(Paint.Style.STROKE);
bottomStrokePaint.setStrokeWidth(8);
bottomStrokePaint.setColor(Color.BLACK);
bottomStrokePaint.setTextSize(bottomTextView.getTextSize());
bottomStrokePaint.setTypeface(typeface);
float topTextMeasurement = topFillPaint.measureText(topText);
float bottomTextMeasurement = bottomFillPaint.measureText(bottomText);
StaticLayout topFillLayout = new StaticLayout(topText, topFillPaint, canvas.getWidth(), Layout.Alignment.ALIGN_CENTER,
1.0f, 0.0f, false);
StaticLayout topStrokeLayout = new StaticLayout(topText, topStrokePaint, canvas.getWidth(), Layout.Alignment.ALIGN_CENTER,
1.0f, 0.0f, false);
StaticLayout bottomFillLayout = new StaticLayout(bottomText, bottomFillPaint, canvas.getWidth(), Layout.Alignment.ALIGN_CENTER,
1.0f, 0.0f, false);
StaticLayout bottomStrokeLayout = new StaticLayout(bottomText, bottomStrokePaint, canvas.getWidth(), Layout.Alignment.ALIGN_CENTER,
1.0f, 0.0f, false);
canvas.translate(0,0);
topFillLayout.draw(canvas);
canvas.translate(0,0);
topStrokeLayout.draw(canvas);
canvas.translate(0, canvas.getHeight() - 210);
bottomFillLayout.draw(canvas);
canvas.translate(0, canvas.getHeigth() - 210);
bottomStrokeLayout.draw(canvas);
Ответ №1:
Существуют различия в координатах, которые вы передаете для рисования bottomStrokeLayout и bottomFillLayout.
canvas.translate(0, canvas.getHeight() - 210);
bottomFillLayout.draw(canvas);
canvas.translate(0,canvas.getHeight() -210);
bottomStrokeLayout.draw(canvas);
Комментарии:
1. Не могли бы вы уточнить? Извините. Я этого не вижу.
2. Видите ли, в вашем коде, когда вы рисуете макет штриха для вида снизу, есть разница в расположении bottomFillLayout и bottomStrokeLayout.
3. Я устанавливаю одинаковые координаты для обоих
canvas.translate()
методов. О какой разнице вы говорите?4. не вижу вашей ширины прохождения в bottomFillLayout, которая написана мной правильно в моем ответе.