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

Я пытаюсь разработать простой класс круговой диаграммы для 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 . Вот лучший пример, показывающий их в контексте пользовательского представления, которое рисует собственный текст.