gpt4 book ai didi

android - 用 Canvas 写文字(onDraw View )

转载 作者:行者123 更新时间:2023-11-29 19:30:07 27 4
gpt4 key购买 nike

我有这个 View (颜色选择器 View )

public class ColorPickerOvalView extends View {

private Paint paint;
private Paint centerPaint;
private Paint paintText;
private final int[] colorsArray;
private OnColorChangedListener changedListener;
private String key;
private boolean trackingCenter;
private boolean highlightCenter;

private RectF rectF;

private static final int CENTER_X = 120;
private static final int CENTER_Y = 120;
private static final int CENTER_RADIUS = 39;
private static final float PI = 3.1415926f;

public ColorPickerOvalView(Context context) {
super(context);
colorsArray = new int[]{
0xFFFF0000, 0xFFFF00FF, 0xFF0000FF, 0xFF00FFFF, 0xFF00FF00,
0xFFFFFF00, 0xFFFF0000
};
}

public ColorPickerOvalView(Context context, AttributeSet attrs) {
super(context, attrs);
colorsArray = new int[]{
0xFFFF0000, 0xFFFF00FF, 0xFF0000FF, 0xFF00FFFF, 0xFF00FF00,
0xFFFFFF00, 0xFFFF0000
};
}

public ColorPickerOvalView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
colorsArray = new int[]{
0xFFFF0000, 0xFFFF00FF, 0xFF0000FF, 0xFF00FFFF, 0xFF00FF00,
0xFFFFFF00, 0xFFFF0000
};
}

public void init(OnColorChangedListener listener, int color, String key) {
//super(c);
changedListener = listener;

Shader shader = new SweepGradient(0, 0, colorsArray, null);

paint = new Paint(Paint.ANTI_ALIAS_FLAG);
paint.setShader(shader);
paint.setStyle(Paint.Style.STROKE);
paint.setStrokeWidth(50);

centerPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
centerPaint.setColor(color);
centerPaint.setStrokeWidth(10);

paintText = new Paint();
paintText.setColor(Color.WHITE);

this.key = key;

float raio = CENTER_X - paint.getStrokeWidth() * 0.5f;
rectF = new RectF(-raio, -raio, raio, raio);
}


@Override
protected void onDraw(Canvas canvas) {

canvas.translate(CENTER_X, CENTER_X);

canvas.drawOval(rectF, paint);
canvas.drawCircle(0, 0, CENTER_RADIUS, centerPaint);

//write the text
canvas.drawText("OK", 0, 0, paintText);

if (trackingCenter) {
int color = centerPaint.getColor();
centerPaint.setStyle(Paint.Style.STROKE);

if (highlightCenter) {
centerPaint.setAlpha(0xFF);
} else {
centerPaint.setAlpha(0x80);
}

canvas.drawCircle(0, 0, CENTER_RADIUS + centerPaint.getStrokeWidth(), centerPaint);

centerPaint.setStyle(Paint.Style.FILL);
centerPaint.setColor(color);
}
}

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
setMeasuredDimension(CENTER_X * 2, CENTER_Y * 2);
}

...

}

我想在圆圈上集中写“OK”,但我的 ok 保持错误(不要集中)。我需要让这段文字正好位于圆心。

enter image description here

我怎样才能集中这个文本?以及如何更改其大小?

谢谢

最佳答案

您必须将文本向左移动其宽度的一半。这意味着:

float textWidth = paintText.measureText(timeText);
float xOffset = textWidth / 2;
canvas.drawText("OK", -xOffset, 0, paintText);

关于android - 用 Canvas 写文字(onDraw View ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40206179/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com