【问题标题】:How to handle the difference in Android 4.2.2 vs older versions for canvas.drawText如何处理 Android 4.2.2 与 canvas.drawText 旧版本的差异
【发布时间】:2013-04-29 20:14:25
【问题描述】:

我使用 drawText 将一些文本绘制到画布上。 在 Android 4.2.2 之前,坐标 0,0 位于左上角,0.5/0.5 位于画布的中心。 在 Android 4.2.2 中,当我绘制到 0.5/0.5 时,文本位于画布的左边缘,而 1.0/0.5 位于中心。所以它在 x 轴上移动了 0.5。

这是代码:

Canvas backgroundCanvas = new Canvas(background);
float scale = (float) getWidth();
backgroundCanvas.scale(scale, scale);
final int desityDPi = getResources().getDisplayMetrics().densityDpi;
float convertedTextSize = (float) valueTextSize / (float) desityDPi;

scalePaint.setTextSize(convertedTextSize);
scalePaint.setTextAlign(Paint.Align.CENTER);

backgroundCanvas.drawColor(Color.GREEN);
backgroundCanvas.drawText("x", 0.5f, 0.5f, scalePaint);
backgroundCanvas.drawText("+", 1.0f, 0.5f, scalePaint);

所以在 Andriod

我不知道发生了什么 - 我认为这不正常。

代码有问题还是我真的必须编写一个if语句来区分坐标的Android版本?

【问题讨论】:

  • 您是否可以在与以前使用的密度不同的密度上运行它?也许这是一个四舍五入的问题。可以发一张“之前”和“之后”的图片吗?
  • 不,我不认为这是一个四舍五入的问题。此问题适用于所有使用 Android 4.2.2 的用户,而且数量很多。我也在模拟器中尝试了它,只是更改了 Androi 版本——这确实导致了这种情况。我的画布大约是 7 厘米,x 和 + 仅取决于 Android 版本实际上相差 50%
  • 你能展示一下之前和之后的图片吗?也许通过查看它,我们可以看到可能是什么问题。此外,其他相关代码也会有所帮助。

标签: android canvas


【解决方案1】:

如果您已经证明 API 确实存在代码差异,那么只需使用 API 特定代码,但我怀疑还有另一个问题:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1){
    // Do something for 4.2 and above
} else{
    // Do something different for older versions
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-08-28
    • 1970-01-01
    • 2013-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-16
    相关资源
    最近更新 更多