Android
Покрасить
Поиск…
Вступление
Краска - это один из четырех объектов, необходимых для рисования, а также холст (содержит призывы рисования), битмап (содержит пиксели) и примитив рисования (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
, форма StrokeSTROKE
, или оба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)
, у вас будет