我使用两种方法在我的应用程序中显示按钮和编辑文本:一种是使用可绘制的 xml 形状,并将其应用于按钮/edittext 的背景,另一种是在自定义视图中使用画布。
我希望结果完全相同,但事实并非如此。您可以在下面看到各个笔画之间的微小差异:
两者都是具有 2dp 笔划宽度和 8dp 角半径的圆形矩形。这是每个人的代码:
左,用作背景的可绘制形状:
<?xml version="1.0" encoding="UTF-8"?>
<shape
xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="@color/transparent"/>
<corners android:radius="@dimen/button_cornersRadius"/>
<stroke
android:width="@dimen/button_strokeWidth"
android:color="@color/blue_light"/>
</shape>
对了,自定义视图的 onDraw 方法:
protected void onDraw(Canvas canvas) {
canvas.drawPath(drawingPath,strokePaint);
canvas.drawText(text,demiWidth,textHeight,textPaint);
}
哪里:
strokePaint = new Paint(Paint.ANTI_ALIAS_FLAG);
strokePaint .setStyle(Paint.Style.STROKE);
strokePaint .setStrokeWidth((int)(2*densityObtainedWithDisplayMetrics)));
strokePaint .setColor(the exact same as above);
而且我在使用相同的所谓等效方式显示渐变时观察到微小的差异:可绘制的形状具有更好的显示效果,颜色看起来更好,线条不模糊。
有人可以解释一下为什么/如何解决它吗?如果我只使用一种方式,那将是第二种方式,但我不想这样做,因为它看起来不干净。谢谢你的帮助!
编辑 :
令人惊讶的是,这种差异仅在自定义布局的笔画宽度为奇数时才会出现。对于偶数值,显示完全相同!