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

Tre*_*vor 2 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绘图缓存位图有点模糊或具有反别名.我发现当我将缓存位图绘制回Canvas时,它与原始矢量图形相比有点模糊,尽管事实上我正在使用没有重新缩放并使用关闭消除锯齿的Paint来绘制位图.我现在只是绝对相信必须有一些缩放过程,我不知道这会导致这种情况发生在位图上.要发现onDraw()的Canvas参数已经应用了一些缩放转换可能是解决这个问题的一个重要线索 - 但我无法理解为什么它有这样的缩放,当Canvas的尺寸肯定与该区域完全匹配时它最终画的屏幕.

谢谢,

崔佛

ada*_*amp 5

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