【问题标题】:Android Canvas - Position text with drawText in the same location on all screen resolutionsAndroid Canvas - 将带有drawText的文本定位在所有屏幕分辨率上的相同位置
【发布时间】:2011-08-28 00:52:27
【问题描述】:

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

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

所以我在某些分辨率下无法估计位置,这很快就会变得一团糟。

如何在画布上确定一个位置,尽管 DPI / 屏幕尺寸大小相同?

【问题讨论】:

    标签: android canvas drawtext


    【解决方案1】:

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

    【讨论】:

    • 如何让文字绘图使用矩阵本身(甚至相机)?我需要它来回答这个问题:stackoverflow.com/q/32180534/878126
    • canvas.getMatrix() 在 api 16 之后被弃用
    【解决方案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);
    }
    

    【讨论】:

      猜你喜欢
      • 2012-05-23
      • 1970-01-01
      • 2011-04-17
      • 1970-01-01
      • 2015-12-03
      • 2023-03-19
      • 2014-04-27
      • 1970-01-01
      • 2014-12-27
      相关资源
      最近更新 更多