2013-11-24 21 views
11

ShapeDrawableを拡張することで、丸みのあるコーナーを境界線としてプログラムで作成する必要があります。私は、外側のピクセルが白で、内側のピクセルが透明である丸い角を持つ黒の境界線を持つ必要があります。私が現在持っているコードには、複数の問題があります。境界線と同じ厚さの滑らかなコーナーが作成されず、境界線の外側のピクセルは透明で白色ではありません。アンドロイドでShapeDrawableを使用して角を丸くしたボーダーをプログラムで作成する方法は?

ここで私は現在、ここcorner

を取得していますコーナーの絵は、私はコンストラクタで「塗りつぶし」のためColor.TRANSPARENTを渡していたコードです:

public class CustomShape extends ShapeDrawable { 
private final Paint fillpaint, strokepaint; 
public CustomShape(int fill, int strokeWidth,int radius) { 

    super(new RoundRectShape(new float[] { radius, radius, radius, radius, radius, radius, radius, radius }, null, null)); 
    fillpaint = new Paint(this.getPaint()); 
    fillpaint.setColor(fill); 
    strokepaint = new Paint(fillpaint); 
    strokepaint.setStyle(Paint.Style.STROKE); 
    strokepaint.setStrokeWidth(strokeWidth); 
    strokepaint.setColor(Color.BLACK); 
} 



@Override 
protected void onDraw(Shape shape, Canvas canvas, Paint paint) { 
    shape.draw(canvas, fillpaint); 
    shape.draw(canvas, strokepaint); 
} 

}

+0

はDrawableのを拡張しようとしたメソッドsetCornerRadiiを()を使用することができますdimensラウンドコーナーを指定しますShapeDrawableではなくカスタムのdtawを使用しますか? – pskink

答えて

0

カスタムドロウアブルを実装できます。以下はxmlの例です。

<?xml version="1.0" encoding="UTF-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android"> 
    <solid android:color="#ffffffff"/>  

    <stroke android:width="3dp" 
      android:color="#ff000000" 
      /> 

    <padding android:left="1dp" 
      android:top="1dp" 
      android:right="1dp" 
      android:bottom="1dp" 
      /> 

    <corners android:bottomRightRadius="7dp" android:bottomLeftRadius="7dp" 
    android:topLeftRadius="7dp" android:topRightRadius="7dp"/> 
</shape> 

このxmlをプロジェクトのドロウアブルフォルダに保存します。今、任意のウィジェットのための通常のドロアブルのようにそれを使用してください。例:android:background = "R.drawable.round_shape"

この例は、linkのように参照されています。あなたは、単に

​​

GradientDrawableドキュメントはhereを見つけることができるソリッド色でGradentDrawableを使用することができます

13

あなたが必要な場合は均等に角を丸めた(そしてあなたの例から、あなたがそうです)。

編集:各コーナーごとに個別

あなたはsetCornerRadii (float[] radii)メソッドを使用して個別に各コーナーの半径を指定することができます。各コーナーに対して、配列には[X_radius、Y_radius]の2つの値が含まれます。コーナーは、左上、右上、右下、左下の順に並べられています。

このプロパティを変更する前にmutate()を起動することをお勧めします。また

+0

leftCornerRadiusとrightCornerRadiusを指定する可能性はありますか? – Chandru

+0

は、各コーナーを別々に丸める方法を追加しました – SGal

0

をあなたはGradientDrawableと

GradientDrawable d = new GradientDrawable(); 
d.setCornerRadii({5.0f,5.0f,5.0f,5.0f}); 
textViewExample.setBackgroundResource(d); 
0
GradientDrawable drawable = (GradientDrawable)image.getBackground(); 
drawable.setGradientRadius(radiuspx); 
関連する問題