在我的表盘中,我正在创建用于绘制文本的Paint对象,然后将其传递给Canvas类的drawText()方法。
说我想抽出时间,0841。我可以用一种颜色绘制前两位数字,然后用不同颜色绘制最后两位数字吗?
例如,我想绘制第一个颜色为白色的数字,并将最后两个数字绘制为红色。我可以创建单独的Paint对象并将分钟/小时分开绘制,但是如果我这样做的话,我担心它会变得乏味。
我附上了一张图片来证明我的意思。
Paint hourPaint = new Paint();
hourPaint.setAntiAlias(true);
hourPaint.setTextSize(timeSize);
答案 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);
}
}
请务必考虑视口大小 - 您不希望绘制超出视图范围的内容。