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

时间:2011-08-28 00:52:27

标签: android canvas drawtext

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

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

所以我对某些分辨率的位置大致接近,这很快就会变得混乱。

尽管有DPI /屏幕尺寸,我如何在画布上指向同一位置的位置?

2 个答案:

答案 0 :(得分:4)

使用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);
}

答案 1 :(得分:2)

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);
}