我使用两种方法在我的应用程序中显示按钮和编辑文本:一种是使用可绘制的xml形状,并将其应用于按钮/编辑文本的背景,另一种是使用自定义视图中的画布。形状drawable和canvas.draw之间的区别,解决方法?
我希望结果完全一样,但事实并非如此。你可以看到下面的各个笔画之间的细微差别:
两者都是圆rectanlges与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);
,并显示具有t梯度时,我观察到的微小差异他相同的假设等价的方式:可绘制的形状有一个更好的显示,颜色看起来更好,线条不模糊。
有人可以解释我为什么/如何解决它吗? 如果我只用一种方法,那将是第二种,但我不想因为它看起来不干净。 感谢您的帮助!
编辑:
令人惊讶地,发生这种差异仅当自定义布局的笔划宽度为奇数。即使值的显示也完全一样!
尝试使用'strokePaint.setDither(true);'。 'ShapeDrawable'可能已经被默认的抖动。 (另外,你可以上传图片到imgur或其他东西,然后张贴链接。) – Eric 2012-07-13 17:25:56
这是在它,我没有把它放在代码中,因为它不会改变任何东西。 – 2012-07-13 17:27:39
@Soxxeh:我把图片imgur:http://imgur.com/njzxD – 2012-07-13 17:32:08