微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

我正在写一个线程的画布.
public void draw(Canvas canvas) {
  Paint p = new Paint();
  p.setAntiAlias(true);
  p.setTextSize(30);
  p.setColor(Color.WHITE);
  p.setTextAlign(Paint.Align.CENTER);

  canvas.drawText("Centered",xCentre,yCentre,p);
}

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

解决方法

我自己找到了解决方案.

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

package com.example;

import android.app.Activity;
import android.content.Context;
import android.graphics.*;
import android.os.Bundle;
import android.view.View;

public class MyActivity extends Activity {

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(new SampleView(this));
  }

  private static class SampleView extends View {
    public SampleView(Context context) {
      super(context);
    }

    @Override
    protected void onDraw(Canvas canvas) {
      canvas.drawColor(Color.WHITE);

      String blackText = "black";
      String redText = " red";

      Paint mPaint = new Paint();
      mPaint.setAntiAlias(true);
      mPaint.setTextSize(30);
      mPaint.setTypeface(Typeface.create(Typeface.SERIF,Typeface.ITALIC));

      float canvasWidth = canvas.getWidth();
      float blackTextWidth = mPaint.measureText(blackText);
      float sentenceWidth = mPaint.measureText(blackText + redText);
      float startPositionX = (canvasWidth - sentenceWidth) / 2;

      mPaint.setTextAlign(Paint.Align.LEFT);
      canvas.translate(0,80);

      mPaint.setColor(Color.BLACK);
      canvas.drawText(blackText,startPositionX,mPaint);
      mPaint.setColor(Color.RED);
      canvas.drawText(redText,startPositionX + blackTextWidth,mPaint);

    }
  }
}

原文地址:https://www.jb51.cc/android/313617.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐