在 Arc CustomView 中绘制文本
Draw Text inside Arc CustomView
我正在尝试在 arc 内绘制文本。代码如下
public Round(Context context, int totalSections, int activeSections, String mText) {
super(context);
int dpi = context.getResources().getDisplayMetrics().densityDpi;
float x = 0.25f;
final float radius = x * (new Float(dpi));
mRadius = Math.round(radius) + 20;
mRect = new RectF(
getWidth() + mStrokeWidth, getWidth() + mStrokeWidth, getWidth() + mRadius - mStrokeWidth, getWidth() + mRadius - mStrokeWidth
);
text = mText;
mTotalSections = totalSections;
mActiveSections = activeSections;
mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
mPaint.setStrokeWidth(mStrokeWidth);
mPaint.setStyle(Paint.Style.STROKE);
mSectionDegree = 360 / mTotalSections;
mSectionDegree -= mGap;
}
public void setmActiveSections(int mActiveSections) {
this.mActiveSections = mActiveSections;
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
float lastDegree = 270 + (mGap / 2);
for (int i = 0; i < mTotalSections; i++) {
if (i < mActiveSections) {
mPaint.setColor(Color.GREEN);
} else {
mPaint.setColor(Color.GRAY);
}
canvas.drawArc(mRect, lastDegree, mSectionDegree, false, mPaint);
lastDegree += mSectionDegree + mGap;
}
Paint mPaint1 = new Paint(Paint.ANTI_ALIAS_FLAG);
mPaint1.setStrokeWidth(1);
mPaint1.setStyle(Paint.Style.STROKE);
mPaint1.setTextSize(15);
mPaint1.setColor(getResources().getColor(R.color.red));
canvas.drawText(text, 20,30, mPaint1);
}
我如何绘制以半径为中心的文本...发生在不同设备上的情况文本不在半径中心
在给定的图像中,我希望 canvas.drawtext 应该出现文本
将此行添加到您的 onDraw()
mPaint1.setTextAlign(Paint.Align.CENTER);
那么drawText
中的x参数可以直接为圆心x即可。您应该能够使用 mRect.centerX()
来获取该值。
您也应该使用 mRect.centerY()
作为 y 值,只是它需要调整。 y 参数实际上是文本基线,所以如果你想要垂直居中以及水平居中,你将不得不检查 paint 的 FontMetrics
中的一些值,以查看将 y 值降低多少以使文本看起来垂直居中。
我正在尝试在 arc 内绘制文本。代码如下
public Round(Context context, int totalSections, int activeSections, String mText) {
super(context);
int dpi = context.getResources().getDisplayMetrics().densityDpi;
float x = 0.25f;
final float radius = x * (new Float(dpi));
mRadius = Math.round(radius) + 20;
mRect = new RectF(
getWidth() + mStrokeWidth, getWidth() + mStrokeWidth, getWidth() + mRadius - mStrokeWidth, getWidth() + mRadius - mStrokeWidth
);
text = mText;
mTotalSections = totalSections;
mActiveSections = activeSections;
mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
mPaint.setStrokeWidth(mStrokeWidth);
mPaint.setStyle(Paint.Style.STROKE);
mSectionDegree = 360 / mTotalSections;
mSectionDegree -= mGap;
}
public void setmActiveSections(int mActiveSections) {
this.mActiveSections = mActiveSections;
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
float lastDegree = 270 + (mGap / 2);
for (int i = 0; i < mTotalSections; i++) {
if (i < mActiveSections) {
mPaint.setColor(Color.GREEN);
} else {
mPaint.setColor(Color.GRAY);
}
canvas.drawArc(mRect, lastDegree, mSectionDegree, false, mPaint);
lastDegree += mSectionDegree + mGap;
}
Paint mPaint1 = new Paint(Paint.ANTI_ALIAS_FLAG);
mPaint1.setStrokeWidth(1);
mPaint1.setStyle(Paint.Style.STROKE);
mPaint1.setTextSize(15);
mPaint1.setColor(getResources().getColor(R.color.red));
canvas.drawText(text, 20,30, mPaint1);
}
我如何绘制以半径为中心的文本...发生在不同设备上的情况文本不在半径中心
在给定的图像中,我希望 canvas.drawtext 应该出现文本
将此行添加到您的 onDraw()
mPaint1.setTextAlign(Paint.Align.CENTER);
那么drawText
中的x参数可以直接为圆心x即可。您应该能够使用 mRect.centerX()
来获取该值。
您也应该使用 mRect.centerY()
作为 y 值,只是它需要调整。 y 参数实际上是文本基线,所以如果你想要垂直居中以及水平居中,你将不得不检查 paint 的 FontMetrics
中的一些值,以查看将 y 值降低多少以使文本看起来垂直居中。