Атрибуты Paint не работают при повторном применении

#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, которая написана мной правильно в моем ответе.