可能有一半的文字被绘制到画布上的颜色不同吗?

时间:2015-08-11 04:15:01

标签: java android canvas watch

在我的表盘中,我正在创建用于绘制文本的Paint对象,然后将其传递给Canvas类的drawText()方法。

说我想抽出时间,0841。我可以用一种颜色绘制前两位数字,然后用不同颜色绘制最后两位数字吗?

例如,我想绘制第一个颜色为白色的数字,并将最后两个数字绘制为红色。我可以创建单独的Paint对象并将分钟/小时分开绘制,但是如果我这样做的话,我担心它会变得乏味。

我附上了一张图片来证明我的意思。

Paint hourPaint = new Paint();
hourPaint.setAntiAlias(true);
hourPaint.setTextSize(timeSize);

enter image description here

1 个答案:

答案 0 :(得分:1)

是的,实现这一目标非常简单。 你走在正确的轨道上。 尝试这样的事情:

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.view.View;

public class ClockView extends View {
private Paint mHourPaint;
private Paint mMinutePaint;
private float mFontSize;

public ClockView(Context context) {
    this(context, null);
}

public ClockView(Context context, AttributeSet attrs) {
    this(context, attrs, 0);
}

public ClockView(Context context, AttributeSet attrs, int defStyleAttr) {
    super(context, attrs, defStyleAttr);

    init();
}

private void init() {
    mFontSize = 92.0f;

    mHourPaint = new Paint();
    mHourPaint.setAntiAlias(true);
    mHourPaint.setColor(Color.WHITE);
    mHourPaint.setStyle(Paint.Style.FILL);
    mHourPaint.setTextSize(mFontSize);

    mMinutePaint = new Paint();
    mMinutePaint.setAntiAlias(true);
    mMinutePaint.setStyle(Paint.Style.FILL);
    mMinutePaint.setColor(Color.RED);
    mMinutePaint.setTextSize(mFontSize);
    mMinutePaint.setFakeBoldText(true);
}

@Override
protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);

    String hourText = "08";
    String minuteText = "41";

    final float x = mHourPaint.measureText(hourText);
    canvas.drawText(hourText, 0, mFontSize, mHourPaint);

    canvas.drawText(minuteText, x, mFontSize, mMinutePaint);
}
}

请务必考虑视口大小 - 您不希望绘制超出视图范围的内容。