更新到Android Studio 0.6.0后,Canvas.drawRect()停止绘图
我最近更新了我的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或更新到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启
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);
}