如何获取canvas的顶部和底部的引用进行动态定位?
How to get a reference to the top and the bottom of a canvas for dynamic positioning?
我在 ImageView 之上有 2 个 TextView。我正在使用 Canvas
和 Paint
类 在图片上绘制标题。我希望标题在图像顶部和 TextView 顶部之间有大约 20dp 的间隙。有哪些方法可以将这些值输入到 Canvas.drawText()
的 y 值中?
文本原点与图片一样,从左上角开始,对于顶部文本,只需将 y 原点设置为 +20dp,对于底部文本,将 y 原点设置为 text.height+20dp
中心文字:
x = image.width/2 - text.width/2;
顶部文字Y轴
y = 20;
底部文字Y轴:
y = image.height - 20 - text.height;
在尝试获取绘制文本的宽度之前测量文本很重要。
检查这个答案:
Measuring text height to be drawn on Canvas ( Android )
你可以关注这个linkhttps://developer.android.com/training/custom-views/custom-drawing#java。它包含定位的详细描述。在你的情况下,
您需要先创建文本
textPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
textPaint.setColor(textColor);
if (textHeight == 0) {
textHeight = textPaint.getTextSize();
} else {
textPaint.setTextSize(textHeight);
}
piePaint = new Paint(Paint.ANTI_ALIAS_FLAG);
piePaint.setStyle(Paint.Style.FILL);
piePaint.setTextSize(textHeight);
shadowPaint = new Paint(0);
shadowPaint.setColor(0xff101010);
shadowPaint.setMaskFilter(new BlurMaskFilter(8, BlurMaskFilter.Blur.NORMAL));
像这样,您需要设置填充并将其放置在您想要的位置,如下所示
// Account for padding
float xpad = (float)(getPaddingLeft() + getPaddingRight());
float ypad = (float)(getPaddingTop() + getPaddingBottom());
// Account for the label
if (showText) xpad += textWidth;
float ww = (float)w - xpad;
float hh = (float)h - ypad;
// Figure out how big we can make the pie.
float diameter = Math.min(ww, hh);
我从上面提到的 URL 得到了整个代码。
居中定位需要添加以下代码
Paint yourPaint = new Paint();
int xP = (canvas.getWidth() / 2);
int yP = (int) ((canvas.getHeight() / 2) - ((yourPaint .descent()yourPaint .ascent()) / 2)) ;
canvas.drawText(yourTextView, xP, yP, yourPaint);
我在 ImageView 之上有 2 个 TextView。我正在使用 Canvas
和 Paint
类 在图片上绘制标题。我希望标题在图像顶部和 TextView 顶部之间有大约 20dp 的间隙。有哪些方法可以将这些值输入到 Canvas.drawText()
的 y 值中?
文本原点与图片一样,从左上角开始,对于顶部文本,只需将 y 原点设置为 +20dp,对于底部文本,将 y 原点设置为 text.height+20dp
中心文字:
x = image.width/2 - text.width/2;
顶部文字Y轴
y = 20;
底部文字Y轴:
y = image.height - 20 - text.height;
在尝试获取绘制文本的宽度之前测量文本很重要。
检查这个答案: Measuring text height to be drawn on Canvas ( Android )
你可以关注这个linkhttps://developer.android.com/training/custom-views/custom-drawing#java。它包含定位的详细描述。在你的情况下,
您需要先创建文本
textPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
textPaint.setColor(textColor);
if (textHeight == 0) {
textHeight = textPaint.getTextSize();
} else {
textPaint.setTextSize(textHeight);
}
piePaint = new Paint(Paint.ANTI_ALIAS_FLAG);
piePaint.setStyle(Paint.Style.FILL);
piePaint.setTextSize(textHeight);
shadowPaint = new Paint(0);
shadowPaint.setColor(0xff101010);
shadowPaint.setMaskFilter(new BlurMaskFilter(8, BlurMaskFilter.Blur.NORMAL));
像这样,您需要设置填充并将其放置在您想要的位置,如下所示
// Account for padding
float xpad = (float)(getPaddingLeft() + getPaddingRight());
float ypad = (float)(getPaddingTop() + getPaddingBottom());
// Account for the label
if (showText) xpad += textWidth;
float ww = (float)w - xpad;
float hh = (float)h - ypad;
// Figure out how big we can make the pie.
float diameter = Math.min(ww, hh);
我从上面提到的 URL 得到了整个代码。
居中定位需要添加以下代码
Paint yourPaint = new Paint();
int xP = (canvas.getWidth() / 2);
int yP = (int) ((canvas.getHeight() / 2) - ((yourPaint .descent()yourPaint .ascent()) / 2)) ;
canvas.drawText(yourTextView, xP, yP, yourPaint);