Intereting Posts
Показать, чтобы установить положение всплывающего окна? Как обрабатывать файлы cookie в httpUrlConnection с помощью cookieManager Как заставить приложение Android вернуться к последнему открытому действию при перезапуске? Как предотвратить множественные экземпляры активности при ее запуске с разными намерениями Разрешение canvas js export не работает на устройстве Android Android Notification Sound Take Picture без предварительного просмотра Android Просмотр файловой системы Raspberry Pi от android через Bluetooth Android 4.0 – API-уровень 14 против API Google (Google Inc.) – API-уровень 14: В чем разница? Как обнаружить прокрутку влево или вправо в Android? Невозможно загрузить приложение Android на устройство (устаревшие банки с деменцией) Можно ли загружать элементы ListPreference из адаптера? Как установить разные темы для раздутого макета в виде заглушки Android: Как сделать клавиатуру всегда видимой? Snackbar скрывает плавающее действие при нажатии на кнопку действия на нем

Как нарисовать текст на холсте?

Я пытаюсь разработать простой класс круговой диаграммы для Android. На данный момент он может отображать карту ярлыков и значений и рисовать круговую диаграмму. Мне еще предстоит добавить легенды для пирога, где мне нужно разместить тексты возле маленьких прямоугольников на углу экрана. Любая помощь оценивается, так как я новичок в Android dev.

Solutions Collecting From Web of "Как нарисовать текст на холсте?"

Вам нужно будет использовать метод drawText класса Canvas.

Paint paint = new Paint(); canvas.drawPaint(paint); paint.setColor(Color.BLACK); paint.setTextSize(16); canvas.drawText("My Text", x, y, paint); 

Вот соответствующая документация:

http://developer.android.com/reference/android/graphics/Canvas.html#drawText(java.lang.String, float, float, android.graphics.Paint)

Там был еще один ответ, который был удален, потому что это была только ссылка. Исходная ссылка находится здесь . Код в основном тот же, но я вынул части текста без текста, а также увеличил размеры, чтобы лучше работать при современных плотностях экрана.

Это просто показывает несколько вещей, которые вы можете сделать с помощью текстового чертежа.

Введите описание изображения здесь

Вот обновленный код:

 public class MainActivity extends AppCompatActivity { DemoView demoview; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); demoview = new DemoView(this); setContentView(demoview); } private class DemoView extends View { public DemoView(Context context){ super(context); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); // custom drawing code here // remember: y increases from top to bottom // x increases from left to right int x = 0; int y = 0; Paint paint = new Paint(); paint.setStyle(Paint.Style.FILL); canvas.save(); canvas.translate(100, 200); // make the entire canvas white canvas.drawColor(Color.WHITE); // draw some text using STROKE style paint.setStyle(Paint.Style.STROKE); paint.setStrokeWidth(1); paint.setColor(Color.MAGENTA); paint.setTextSize(100); canvas.drawText("Style.STROKE", 0, 0, paint); canvas.translate(0, 200); // draw some text using FILL style paint.setStyle(Paint.Style.FILL); //turn antialiasing on paint.setAntiAlias(true); //paint.setTextSize(30); canvas.drawText("Style.FILL", 0, 0, paint); canvas.translate(0, 200); // draw some rotated text // get text width and height // set desired drawing location x = 75; y = 185; paint.setColor(Color.GRAY); //paint.setTextSize(25); String str2rotate = "Rotated!"; // draw bounding rect before rotating text Rect rect = new Rect(); paint.getTextBounds(str2rotate, 0, str2rotate.length(), rect); canvas.translate(x, y); paint.setStyle(Paint.Style.FILL); // draw unrotated text canvas.drawText("!Rotated", 0, 0, paint); paint.setStyle(Paint.Style.STROKE); canvas.drawRect(rect, paint); // undo the translate canvas.translate(-x, -y); // rotate the canvas on center of the text to draw canvas.rotate(-45, x + rect.exactCenterX(), y + rect.exactCenterY()); // draw the rotated text paint.setStyle(Paint.Style.FILL); canvas.drawText(str2rotate, x, y, paint); //undo the translation and rotation canvas.restore(); } } } 

Что-то еще, что я хочу попробовать позже, это рисовать текст по пути .

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

Введите описание изображения здесь

Другой (возможно, лучший) способ рисования текста на холсте – использовать StaticLayout . При необходимости обрабатывается многострочный текст.

 String text = "This is some text."; TextPaint textPaint = new TextPaint(); textPaint.setAntiAlias(true); textPaint.setTextSize(16 * getResources().getDisplayMetrics().density); textPaint.setColor(0xFF000000); int width = (int) textPaint.measureText(text); StaticLayout staticLayout = new StaticLayout(text, textPaint, (int) width, Layout.Alignment.ALIGN_NORMAL, 1.0f, 0, false); staticLayout.draw(canvas); 

TextPaint и StaticLayout были созданы непосредственно перед использованием здесь для иллюстрации. onDraw не onDraw это делает onDraw . Вот лучший пример, показывающий их в контексте пользовательского представления, которое рисует собственный текст.