更新到Android Studio 0.6.0后,Canvas.drawRect()停止绘制

时间:2014-06-11 17:01:36

标签: android android-studio android-canvas android-gradle

我最近更新了我的Android应用(请参阅source on Github)以使用Android Studio 0.6.0,这需要将构建工具提升到v19.1.0(从v19.0.1开始),将Android Gradle插件提升到v0。 11(从0.9开始),Gradle包装器到1.12(从1.11开始)。

在上述更改之前(this commit),应用程序成功地在画布上绘制方块以显示GLONASS卫星的信号强度(参见ID 87和88):

enter image description here

更新我的Android工具并通过Android Studio或gradlew installDebug启动后,方块突然消失(参见ID 77,87,88):

enter image description here

绘制正方形的代码,其中心为(x,y),为:

canvas.drawRect(x - SAT_OFFSET, y + SAT_OFFSET, x + SAT_OFFSET, y - SAT_OFFSET, mSatelliteStrokePaint);

(完整课程见Github

可以看到更新到Android Studio 0.6.0的所有更改的提交here

更新Android工具后,为什么canvas.drawRect()突然停止工作?

2 个答案:

答案 0 :(得分:4)

显然这与Android处理{Grage Plugin 0.11 enabling the new manifest merging tool by default触发的drawRect()无效输入值有关。

如果我将useOldManifestMerger true添加到build.gradle,则广场会返回:

android {
    compileSdkVersion 19
    buildToolsVersion "19.1.0"
    useOldManifestMerger true
    ...
}

根本问题是Canvas.drawRect()接受参数(float left, float top, float right, float bottom, Paint paint)

我将矩形的顶部和底部坐标反转,因此顶部值(应该是最小的y值)是较大的y值,而底部值(应该是最大的y值)是最小的y值(原点(0,0)位于左上角)。

在Android Studio 0.6.0工具更新之前,Android正在纠正无效输入并仍在绘制正方形。在使用新的清单合并工具启动Android Studio 0.6.0工具更新后,Android不再更正无效输入,而是不会绘制任何内容。

更改我的代码后,反转广场的顶部/底部y值:

c.drawRect(x - SAT_OFFSET, y - SAT_OFFSET, x + SAT_OFFSET, y + SAT_OFFSET, mSatelliteStrokePaint);

...广场重新出现(即使使用新的清单合并 - 即没有将useOldManifestMerger true添加到build.gradle)。

因此,解决此问题的正确方法是将方块的顶部/底部坐标反转为有效输入,并仍然使用新的清单合并。

答案 1 :(得分:0)

这太荒谬了 - 我们一直在向后绘制矩形'超过30年。有时候有一些有效的程序化理由可以倒退。

如果您需要此功能,请使用以下内容。

public static void drawRectOriented(Canvas g, float x1,float y1,float x2,float y2,Paint p) {
    if (x1 > x2) {
        float t = x2;
        x2 = x1;
        x1 = t;
    }
    if (y1 > y2) {
        float t = y2;
        y2 = y1;
        y1 = t;
    }
    g.drawRect(x1,y1,x2,y2, p);
}