在onDraw()方法中,为什么提供的Canvas已经具有比例?

时间:2011-06-08 23:28:35

标签: android

在当前的测试项目中,我有一个自定义视图,我将其命名为SVGView,它只是向Canvas绘制一些矢量图形(路径等)。

XML布局文件只包含一个FrameLayout,它包含一个子SVGView。当前示例中SVGView的android:layout_widthandroid:layout_height属性都设置为300px(包含FrameLayout的空间足以容纳)。在SVGView的onMeasure()中,对setMeasuredDimension()的调用被赋予参数300,300。

当调用onDraw()方法将图形绘制到Canvas对象时,我发现Canvas没有标识矩阵;相反,Canvas已经应用了一些规模转换。这是什么原因?我(错误地)假设Canvas的缩放比例为1,因为View的实际尺寸,Canvas以及它在屏幕上的表示都匹配。

关于我在前面的问题中详细描述的问题,我问这个问题:Canvas drawing cache bitmap is slightly blurred or has anti-alias。我发现当我将缓存位图绘制回Canvas时,它与原始矢量图形相比有点模糊,尽管事实上我正在使用没有重新缩放并使用关闭消除锯齿的Paint来绘制位图。我现在只是绝对相信必须有一些缩放过程,我不知道这会导致这种情况发生在位图上。要发现onDraw()的Canvas参数已经应用了一些缩放变换可能是解决这个问题的一个重要线索 - 但我无法理解为什么它有这样的缩放,当Canvas的尺寸肯定与该区域完全匹配时它最终要画的画面。

谢谢,

崔佛

1 个答案:

答案 0 :(得分:5)

您是否在清单中声明了minSdkVersion或targetSdkVersion?如果您将API级别定位为低于4,则您的应用将以缩放兼容模式运行,就像它定位到G1屏幕一样。