アプリケーションでボタンを表示し、テキストを編集する 2 つの方法を使用しています。
結果はまったく同じになると思いますが、そうではありません。それぞれのストロークの小さな違いを以下に示します。
どちらも、ストローク幅が 2 dp、角の半径が 8 dp の丸い長方形です。それぞれのコードは次のとおりです。
左、背景として使用される描画可能な形状:
<?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);
そして、おそらく同等の方法でグラデーションを表示すると、小さな違いが見られます。シェイプ ドローアブルの表示がより良くなり、色がより良く見え、線がぼやけません。
誰かが理由/回避方法を説明してもらえますか? 片方だけ使うなら2番ですが、見た目がすっきりしないので使いたくないです。助けてくれてありがとう!
編集 :
驚くべきことに、この違いは、カスタム レイアウトのストローク幅が奇数の場合にのみ発生します。値が偶数の場合、表示はまったく同じです。