Android Canvas - 在所有屏幕分辨率上使用drawText将文本定位在同一位置

发布于 2024-12-01 18:30:50 字数 228 浏览 1 评论 0原文

我似乎无法将文本放置在不同分辨率的屏幕上的相同位置。问题是文本是浮动的,它不是任何布局类型控件的一部分。

我尝试以与屏幕尺寸相比的相对单位来定位文本。例如,我将其放在 X 轴上的 50% 和 Y 轴上的 67.89%。尽管如此,文本在不同分辨率的屏幕上显示在不同的位置。

因此,我陷入了对某些分辨率的近似位置的困境,而且这很快就会变得混乱。

如何在画布上精确定位与 DPI/屏幕尺寸相同的位置?

I can't seem to get text positioned in the same places on screens of different resolution. The problem is the text is floating, it's not part of any layout type of control.

I try to position the text in relative units compared the screen size. For example, I put it at 50% on the X and 67.89% on the Y axis. Despite that, the text appears in a different location on different resolution screens.

So I'm stuck approximating the location for certain resolutions and this gets messy really fast.

How can I pin point a location on a canvas that is the same spot despite the DPI / screen size?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

清晰传感 2024-12-08 18:30:50

使用 DisplayMetrics 计算距离。例如,如果您始终希望文本距左侧和顶部 1.5 英寸。

这适用于您在其上绘制的任何视图或位图。

draw(Canvas canvas){
    Matrix identity = new Matrix; // Used to have canvas draw on
    Matrix savedMatrix = new Matrix();
    canvas.getMatrix(savedMatrix);
    canvas.setMatrix(identity);

    float y = displayMetrics.ydpi * 1.5;
    float x = displayMetrics.xdpi * 1.5;

    canvas.drawText(text, x, y + paint.getTextSize(), paint);
    canvas.setMatrix(savedMatrix);
}

Use DisplayMetrics to calculate the distance. For example if you always want the text to be 1.5 inches from the left and top.

This will work with any View or Bitmap you drawing on.

draw(Canvas canvas){
    Matrix identity = new Matrix; // Used to have canvas draw on
    Matrix savedMatrix = new Matrix();
    canvas.getMatrix(savedMatrix);
    canvas.setMatrix(identity);

    float y = displayMetrics.ydpi * 1.5;
    float x = displayMetrics.xdpi * 1.5;

    canvas.drawText(text, x, y + paint.getTextSize(), paint);
    canvas.setMatrix(savedMatrix);
}
擦肩而过的背影 2024-12-08 18:30:50

有关总体显示密度(以及其他指标)的信息可在 DisplayMetrics 类中找到。您可以这样检索它:

void getMetrics(Context context) {
    DisplayMetrics metrics = context.getResources().getDisplayMetrics();
}

http://developer.android.com/reference/ android/util/DisplayMetrics.html

您可以缩放所有坐标以适应屏幕密度,如下所示:

void scaleForDensity(DisplayMetrics metrics, Point point) {
    point.x = (int)(point.x*metrics.density + .5f);
    point.y = (int)(point.y*metrics.density + .5f);
}

Information about the overall display density (as well as other metrics) is available in the DisplayMetrics class. You can retrieve it like this:

void getMetrics(Context context) {
    DisplayMetrics metrics = context.getResources().getDisplayMetrics();
}

http://developer.android.com/reference/android/util/DisplayMetrics.html

You can scale all coordinates to account for screen density like this:

void scaleForDensity(DisplayMetrics metrics, Point point) {
    point.x = (int)(point.x*metrics.density + .5f);
    point.y = (int)(point.y*metrics.density + .5f);
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文