android – 如何将居中的多色文本写入画布?

前端之家收集整理的这篇文章主要介绍了android – 如何将居中的多色文本写入画布?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在写一个线程的画布.
  1. public void draw(Canvas canvas) {
  2. Paint p = new Paint();
  3. p.setAntiAlias(true);
  4. p.setTextSize(30);
  5. p.setColor(Color.WHITE);
  6. p.setTextAlign(Paint.Align.CENTER);
  7.  
  8. canvas.drawText("Centered",xCentre,yCentre,p);
  9. }

当我有一个多色的SpannableStringBuilder我想写入画布时我的问题就开始了,我不知道怎么做. SpannableStringBuilder有一个drawText()方法,我一直无法使用.或者是否有其他方法将字符串写入画布,其中一些字母具有不同的颜色?

解决方法

我自己找到了解决方案.

您可以计算字符串在画布上绘制后的宽度.然后你知道在改变颜色之后还在哪里继续向画布绘制文本.

  1. package com.example;
  2.  
  3. import android.app.Activity;
  4. import android.content.Context;
  5. import android.graphics.*;
  6. import android.os.Bundle;
  7. import android.view.View;
  8.  
  9. public class MyActivity extends Activity {
  10.  
  11. @Override
  12. protected void onCreate(Bundle savedInstanceState) {
  13. super.onCreate(savedInstanceState);
  14. setContentView(new SampleView(this));
  15. }
  16.  
  17. private static class SampleView extends View {
  18. public SampleView(Context context) {
  19. super(context);
  20. }
  21.  
  22. @Override
  23. protected void onDraw(Canvas canvas) {
  24. canvas.drawColor(Color.WHITE);
  25.  
  26. String blackText = "black";
  27. String redText = " red";
  28.  
  29. Paint mPaint = new Paint();
  30. mPaint.setAntiAlias(true);
  31. mPaint.setTextSize(30);
  32. mPaint.setTypeface(Typeface.create(Typeface.SERIF,Typeface.ITALIC));
  33.  
  34. float canvasWidth = canvas.getWidth();
  35. float blackTextWidth = mPaint.measureText(blackText);
  36. float sentenceWidth = mPaint.measureText(blackText + redText);
  37. float startPositionX = (canvasWidth - sentenceWidth) / 2;
  38.  
  39. mPaint.setTextAlign(Paint.Align.LEFT);
  40. canvas.translate(0,80);
  41.  
  42. mPaint.setColor(Color.BLACK);
  43. canvas.drawText(blackText,startPositionX,mPaint);
  44. mPaint.setColor(Color.RED);
  45. canvas.drawText(redText,startPositionX + blackTextWidth,mPaint);
  46.  
  47. }
  48. }
  49. }

猜你在找的Android相关文章