2012-03-01 9 views
3

私はいくつかの項目で1つのリストビューを持っています。私のリストビューでは、画像付きのアイテムを表示するためのカスタムアダプターを使用しています。アイテムの私のイメージはJSON私のイメージから来ている。このようなものです - 今、私はちょうど丸い角を持つ画像を必要とする丸い角として画像を変更する

Needed

。どのように私はこれを達成するのですか?

+1

から抽出されたコードhttp://stackoverflow.com/questions/6539781/android-imageview-with-rounded-corners-not-working –

+0

あなたがそれを行うことができることができますCss/Html – Nag

答えて

8
public static Bitmap getRoundedCornerBitmap(Bitmap bitmap) { 
    Bitmap output = Bitmap.createBitmap(bitmap.getWidth(), 
     bitmap.getHeight(), Config.ARGB_8888); 
    Canvas canvas = new Canvas(output); 

    final int color = 0xff424242; 
    final Paint paint = new Paint(); 
    final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight()); 
    final RectF rectF = new RectF(rect); 
    final float roundPx = 12; 

    paint.setAntiAlias(true); 
    canvas.drawARGB(0, 0, 0, 0); 
    paint.setColor(color); 
    canvas.drawRoundRect(rectF, roundPx, roundPx, paint); 

    paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN)); 
    canvas.drawBitmap(bitmap, rect, rect, paint); 

    return output; 
    } 

http://ruibm.com/?p=184

+0

私は 'roundPx'の値を試してきましたが、ImageViewは何とか長方形です。 OPの必要なイメージと同じ形を得るために 'roundPx'にどのような値を渡すべきですか? –

+0

roundPXはコーナーの半径でなければなりません。 [公式ドキュメント](http://developer.android.com/reference/android/graphics/Canvas.html#drawRoundRect)を確認してください。より大きな値を試してください。 [Here](http://android-er.blogspot.nl/2011/08/canvasdrawroundrect.html)ではradius = 100と50の例が見えます –

+0

imageviewのscaletypeを設定しようとするとうまくいかず、fitXYだけが動いています、centerCropなどは予測できない結果を示していますが、誰もが同じ問題を抱えていますか? –

1
Bitmap myCoolBitmap = ... ; // <-- Your bitmap you want rounded  
int w = myCoolBitmap.getWidth(), h = myCoolBitmap.getHeight(); 

私たちは、丸みを帯びた角は、我々は、ポーター・ダフのXFERモードを使用して、最終的にこの塗料を適用しようとしているほとんどのケースで

Bitmap rounder = Bitmap.createBitmap(w,h,Bitmap.Config.ARGB_8888); 
Canvas canvas = new Canvas(rounder);  

をアルファチャンネルを持っていることを確認する必要があります。 これにより、特定のピクセルだけを上書きすることができます。 REDは任意です。これは、私たちは普通の見ている丸いボックスをペイントするxferPaintを再利用している、完全に不透明であった任意の色(アルファ= 255)

Paint xferPaint = new Paint(Paint.ANTI_ALIAS_FLAG); 
xferPaint.setColor(Color.RED); 

可能性があり、20.fは、私たちがすることによって丸めている量です。

canvas.drawRoundRect(新しいRectF(0,0、w、h)、20.0f、20.0f、xferPaint);

今、私たちは、塗料に「魔法のタレ」を適用

xferPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_IN)); 
Now apply this bitmap ontop of your image: 

canvas.drawBitmap(myCoolBitmap, 0,0, null); 
canvas.drawBitmap(rounder, 0, 0, xferPaint); 
0

ビットマップ画像の丸いエッジを取得する方法についてこの前のthread、華麗な答えをチェックしてください。

1
public static Bitmap getRoundedCornerBitmap(Bitmap bitmap, int pixels) { 

    Bitmap output = Bitmap.createBitmap(bitmap.getWidth(), bitmap 
      .getHeight(), Config.ARGB_8888); 
    Canvas canvas = new Canvas(output); 

    final int color = 0xff424242; 
    final Paint paint = new Paint(); 
    final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight()); 
    final RectF rectF = new RectF(rect); 
    final float roundPx = pixels; 

    paint.setAntiAlias(true); 
    canvas.drawARGB(0, 0, 0, 0); 
    paint.setColor(color); 
    canvas.drawRoundRect(rectF, roundPx, roundPx, paint); 

    paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN)); 
    canvas.drawBitmap(bitmap, rect, rect, paint); 

    return output; 
} 
関連する問題