我正在尝试使用下面的代码在位图上绘制两个文本,一切正常,但是如果文本的大小变小,则位图的大小会出现问题,例如
1080x1920
250x268
代码:
public Bitmap drawTextToBitmapVHS(Context gContext,
Bitmap bitmap) {
String PLAY = "PLAY ►";
String DATE = getDate(Calendar.getInstance());
android.graphics.Bitmap.Config bitmapConfig =
bitmap.getConfig();
if (bitmapConfig == null) {
bitmapConfig = android.graphics.Bitmap.Config.ARGB_8888;
}
bitmap = bitmap.copy(bitmapConfig, true);
Canvas canvas = new Canvas(bitmap);
Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
paint.setColor(Color.WHITE);
double relation = Math.sqrt(canvas.getWidth() * canvas.getHeight()) / 250;
paint.setTextSize((float) (12 * relation));
paint.setTypeface(Typeface.create(Typeface.createFromAsset(getAssets(), "fonts/VCR.ttf"), Typeface.BOLD));
Rect bounds = new Rect();
paint.getTextBounds(DATE, 0, DATE.length(), bounds);
int horizontalSpacing = 24;
int verticalSpacing = 36;
int x = horizontalSpacing;
int y = bitmap.getHeight() - verticalSpacing;
canvas.drawText(PLAY,
x, bounds.height() + verticalSpacing, paint);
canvas.drawText(getHours(Calendar.getInstance()), x, y - 50, paint);
canvas.drawText(DATE, x, y, paint);
return bitmap;
}
尽管位图的大小与第一个图像(1080x1920)完全一样,但是我如何使文本固定,谢谢。
答案 0 :(得分:0)
问题似乎出在您的硬编码间距以及可能是您计算的文字大小。如果您将这些设置与位图大小相关,则可能会有所帮助,例如:
int horizontalSpacing = 24 * bitmap.getWidth() / 1080;
int verticalSpacing = 36 * bitmap.getHeight() / 1920;
这应该将位置设置为与1080x1920位图相同,但是对于小的位图,除非类似地调整相对于位图高度的文本大小,否则您可能会发现文本重叠:
paint.setTextSize((float) (70 * bitmap.getHeight() / 1920));
您对时间字段的定位也经过硬编码,因此需要更改:
int hoursOffset = 50 * bitmap.getHeight() / 1920;
canvas.drawText(getHours(Calendar.getInstance()), x, y - hoursOffset, paint);
将这些文字放在一起,将在与1080x1920位图相同的相对位置和大小上绘制文本。