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

更新到Android Studio 0.6.0后,Canvas.drawRect()停止绘图,android,android-studio,android-canvas,android-gradle-plugin,Android,Android Studio,Android Canvas,Android Gradle Plugin,我最近更新了我的Android应用程序(请参阅),使用Android Studio 0.6.0,这需要将构建工具升级到v19.1.0(从v19.0.1)、Android Gradle插件升级到v0.11(从0.9)以及Gradle包装器升级到1.12(从1.11) 在进行上述更改(at)之前,应用程序成功地在画布上绘制正方形,以显示GLONASS卫星的信号强度(参见IDs 87和88): 在更新我的Android工具并通过Android Studio或gradlew installDebug启

我最近更新了我的Android应用程序(请参阅),使用Android Studio 0.6.0,这需要将构建工具升级到v19.1.0(从v19.0.1)、Android Gradle插件升级到v0.11(从0.9)以及Gradle包装器升级到1.12(从1.11)

在进行上述更改(at)之前,应用程序成功地在画布上绘制正方形,以显示GLONASS卫星的信号强度(参见IDs 87和88):

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

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

canvas.drawRect(x - SAT_OFFSET, y + SAT_OFFSET, x + SAT_OFFSET, y - SAT_OFFSET, mSatelliteStrokePaint);
(见完整课程)

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


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

显然,这与Android处理由Android Gradle插件0.11触发的
drawRect()
的无效输入值有关

如果我将
useoldmanifestmerge true
添加到我的
build.gradle
,则方块返回:

android {
    compileSdkVersion 19
    buildToolsVersion "19.1.0"
    useOldManifestMerger true
    ...
}
潜在的问题是接受参数
(左浮动、上浮动、右浮动、下浮动、油漆)

我颠倒了矩形的顶部和底部坐标,因此顶部值(应该是最小的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);
…方块再次出现(即使在使用新的清单合并时-即未将
useOldManifestMerge true
添加到
build.gradle


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

显然,这与Android处理由Android Gradle插件0.11触发的
drawRect()
的无效输入值有关

如果我将
useoldmanifestmerge true
添加到我的
build.gradle
,则方块返回:

android {
    compileSdkVersion 19
    buildToolsVersion "19.1.0"
    useOldManifestMerger true
    ...
}
潜在的问题是接受参数
(左浮动、上浮动、右浮动、下浮动、油漆)

我颠倒了矩形的顶部和底部坐标,因此顶部值(应该是最小的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);
…方块再次出现(即使在使用新的清单合并时-即未将
useOldManifestMerge true
添加到
build.gradle


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

这太荒谬了-我们已经“向后绘制矩形”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);
}

这太荒谬了——我们已经“向后画矩形”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);
}