【问题标题】:Android drawing position on viewAndroid 在视图上绘制位置
【发布时间】:2015-12-21 11:29:14
【问题描述】:

由于我是 Android 开发的初学者,我需要有人给我一个答案或任何关于我的问题的问题。

当我使用以下代码在视图上绘制一个简单的矩形时,该矩形不会以我期望的方式显示。

canvas.drawLine(0, 0, getWidth(), getHeight(), framePaint);

错了

但是当我这样改变它时,它可以正常显示。

canvas.drawRect(1, 0, getWidth(), getHeight()-1, framePaint);

正确

看起来左边和底线被从视图中剪掉了。 我期待视图的位置从零索引开始,例如 0 ~(视图大小)-1。是我理解错了还是我做错了什么?

framePaint是这样配置的;

framePaint = new Paint();
framePaint.setColor(Color.rgb(255,0,0));
framePaint.setStrokeWidth(1);
framePaint.setStyle(Paint.Style.STROKE);

【问题讨论】:

  • 根据我的尝试(也许有人会证明我错了),笔划始终与形状边缘的中心对齐,不计入形状的宽度,因此您必须考虑当你定位元素时,这个事实。除此之外,您还可以将 0 传递给 setStrokeWidth 以获得细线、单像素宽度的笔触,它不会根据屏幕密度进行缩放。
  • @Ace_McIntosh 感谢您的回复。是的。 setStrokeWidth 与 0 作品。我仍然很困惑,问题在于密度的笔画。我可能需要仔细阅读与此相关的参考资料或书籍...
  • 好的,根据this question setStrokeWidth 接受像素数,因此无论哪种方式它都与密度无关(即使参数大于零)——抱歉让你感到困惑,我不应该当任何值都为真时,已经指出了这个特定值。

标签: android view draw


【解决方案1】:

会发生什么:

当您从总像素中减去一个时,它会在图像中绘制线条,而不是在图像之外。

此外,开头的“1”也有助于代码留在画布中。

您可能想尝试将代码中的 1 替换为 2,因为画布使用额外的像素来自动移除“锯齿”。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-06-13
    • 2021-04-02
    • 1970-01-01
    • 2020-11-25
    • 1970-01-01
    • 1970-01-01
    • 2013-07-18
    • 2011-12-07
    相关资源
    最近更新 更多