【发布时间】:2012-07-13 17:24:21
【问题描述】:
我使用两种方法在我的应用程序中显示按钮和编辑文本:一种是使用可绘制的 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);
我观察到在以相同的所谓等效方式显示渐变时存在微小差异:可绘制形状具有更好的显示效果,颜色看起来更好,线条不模糊。
有人可以解释一下为什么/如何解决它吗? 如果我只使用一种方式,那将是第二种方式,但我不想这样做,因为它看起来不干净。 感谢您的帮助!
编辑:
令人惊讶的是,这种差异仅在自定义布局的笔画宽度为奇数时才会出现。偶数值显示完全一样!
【问题讨论】:
-
尝试使用
strokePaint.setDither(true);。默认情况下,ShapeDrawable可能已经被抖动。 (另外,你可以上传图片到 imgur 之类的,然后发布链接。) -
在里面,我没有把它放在代码中,因为它并没有改变任何东西..
-
@Soxxeh : 我把图片放在 imgur 上 : imgur.com/njzxD
-
@0gravity : 不等于 strokePaint = new Paint(Paint.ANTI_ALIAS_FLAG); ?
-
@Charles 是的,这就是我删除评论的原因。我通常使用
strokePaint.setAntiAlias(true);而不是你的做法,但应该是一样的。为了安全起见,您可以尝试一下 :)
标签: android android-canvas shapedrawable