Поиск…


Вступление

Краска - это один из четырех объектов, необходимых для рисования, а также холст (содержит призывы рисования), битмап (содержит пиксели) и примитив рисования (Rect, Path, Bitmap ...)

Создание краски

Вы можете создать новую краску с одним из этих трех конструкторов:

  • new Paint() Создать с настройками по умолчанию
  • new Paint(int flags) Создать с флагами
  • new Paint(Paint from) Параметры копирования из другой краски

Обычно рекомендуется никогда не создавать объект рисования или любой другой объект в onDraw (), поскольку это может привести к проблемам с производительностью. (Android Studio, вероятно, предупредит вас) Вместо этого сделайте его глобальным и инициализируйте его в своем конструкторе классов следующим образом:

public class CustomView extends View {
    
    private Paint paint;
    
    public CustomView(Context context) {
        super(context);
        paint = new Paint();
        //...
    }
    
    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        paint.setColor(0xFF000000);
        // ...
    }
}

Настройка Paint для текста

Настройки текстового чертежа

  • setTypeface(Typeface typeface) Установите шрифт. См. Шрифт
  • setTextSize(int size) Установите размер шрифта в пикселях.
  • setColor(int color) Установите цвет рисования рисунка, включая цвет текста. Вы также можете использовать setARGB(int a, int r, int g, int b и setAlpha(int alpha)
  • setLetterSpacing(float size) Установите расстояние между символами в ems. Значение по умолчанию равно 0, отрицательное значение будет затягивать текст, а положительный - расширяет его.
  • setTextAlign(Paint.Align align) Установите выравнивание текста относительно его начала. Paint.Align.LEFT будет рисовать его справа от начала координат, RIGHT будет рисовать его влево, а CENTER будет рисовать его по центру (по горизонтали)
  • setTextSkewX(float skewX) Это можно считать поддельным курсивом. SkewX представляет горизонтальное смещение нижней части текста. (используйте -0.25 для курсива)
  • setStyle(Paint.Style style) Наполните текст FILL , Stroke текст STROKE , или оба FILL_AND_STROKE

Обратите внимание, что вы можете использовать TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, size, getResources().getDisplayMetrics()) для преобразования из SP или DP в пиксели.

Измерительный текст

  • float width = paint.measureText(String text) Измерьте ширину текста
  • float height = paint.ascent() Измерение высоты текста
  • paint.getTextBounds(String text, int start, int end, Rect bounds Сохраняет размеры текста. Вы назначили Rect, оно не может быть null:
 String text = "Hello world!";
 Rect bounds = new Rect();
 paint.getTextBounds(text, 0, text.length(), bounds);

Существуют и другие методы измерения, однако эти три должны соответствовать большинству целей.

Настройка Paint для рисования фигур

  • setStyle(Paint.Style style) Заполненная форма FILL , форма Stroke STROKE , или оба FILL_AND_STROKE
  • setColor(int color) Установите цвет рисования рисунка. Вы также можете использовать setARGB(int a, int r, int g, int b и setAlpha(int alpha)
  • setStrokeCap(Paint.Cap cap) Установите ограничения на линию, либо ROUND , SQUARE , либо BUTT (нет). См. это .
  • setStrokeJoin(Paint.Join join) Установите линии, соединяющие MITER (pointy), ROUND или BEVEL . Смотрите это .
  • setStrokeMiter(float miter) Установите ограничение на объединение митра. Это может препятствовать тому, чтобы объединение титров продолжалось неопределенно, превратив его в скошенное соединение после x пикселей. Смотрите это .
  • setStrokeWidth(float width) Установите ширину хода. 0 будет рисовать в режиме волоса, независимо от матрицы холста. (всегда 1 пиксель)

Установка флагов

Вы можете установить следующие флаги в конструкторе или с помощью setFlags(int flags)

  • Paint.ANTI_ALIAS_FLAG Включить сглаживание, Paint.ANTI_ALIAS_FLAG рисунок.
  • Paint.DITHER_FLAG Включить сглаживание. Если точность цвета выше, чем у устройства, это произойдет .
  • Paint.EMBEDDED_BITMAP_TEXT_FLAG Позволяет использовать растровые шрифты.
  • Paint.FAKE_BOLD_TEXT_FLAG будет рисовать текст с поддельным жирным эффектом, который можно использовать вместо жирного шрифта. Некоторые шрифты имеют жирный шрифт, поддельные смелые не будут
  • Paint.FILTER_BITMAP_FLAG Влияет на выборку растровых изображений при преобразовании.
  • Paint.HINTING_OFF , Paint.HINTING_ON Переключает Paint.HINTING_ON шрифтов, см. Это
  • Paint.LINEAR_TEXT_FLAG Отключает масштабирование шрифтов, вместо этого выполняются операции рисования
  • Paint.SUBPIXEL_TEXT_FLAG Текст будет вычисляться с использованием субпиксельной точности.
  • Paint.STRIKE_THRU_TEXT_FLAG Текст будет нарисован
  • Paint.UNDERLINE_TEXT_FLAG Текст будет Paint.UNDERLINE_TEXT_FLAG

Вы можете добавить флаг и удалить флаги следующим образом:

Paint paint = new Paint();
paint.setFlags(paint.getFlags() | Paint.FLAG);   // Add flag
paint.setFlags(paint.getFlags() & ~Paint.FLAG);  // Remove flag

Пытаться удалить флаг, которого нет или добавить флаг, который уже там, ничего не изменит. Также обратите внимание, что большинство флагов также можно установить с помощью set<Flag>(boolean enabled) , например setAntialias(true) .

Вы можете использовать paint.reset() для сброса краски по умолчанию. Единственный флаг по умолчанию - EMBEDDED_BITMAP_TEXT_FLAG . Он будет установлен, даже если вы используете new Paint(0) , у вас будет



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow