2013-06-11 10 views
10

私のビットマップの周りに丸いフレームを作成しようとしています!ラウンド私のビットマップを作ることができ、このコードイムで丸いビットマップに丸い円を追加する

This is what im trying to acheive!

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 = 0xff4242DB; 
    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 = bitmap.getWidth()/2; 

    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.drawCircle(0, 0, bitmap.getWidth(), paint); 
    canvas.drawBitmap(bitmap, rect, rect, paint); 

    return output; 
} 

私は、キャンバスの円(outcommentedライン)を描くようにされて試してみたが、それは何の結果を持っていた何か。 周りに円の枠線を追加する方法を知っている人はいますか?私はラインを使用する場合

EDITは

canvas.drawCircle(0, 0, bitmap.getWidth(), paint); 

効果がある3角が丸みを帯び得るが、左上が同じ(90度)のまま しかし、こと、私はできません任意の線や円を参照してください!今

+0

何か問題があった場合、何かエラーが発生しましたか? – Sam

+0

@Samあ、申し訳ありませんが、私は質問を更新する! – Sebastian

+0

あなたはどうやって小さな影を作りましたか? – xanexpt

答えて

36

更新

そこは、私はより多くの柔軟性が必要とされない限り、それを使用することをお勧めしますSupport libraryRoundedBitmapDrawableとそれに対応する工場です。


オリジナル回答

あなたはビットマップの後に円を描画する必要があります。これが私のトリックでした。

int w = bitmap.getWidth();           
int h = bitmap.getHeight();           

int radius = Math.min(h/2, w/2);         
Bitmap output = Bitmap.createBitmap(w + 8, h + 8, Config.ARGB_8888); 

Paint p = new Paint();            
p.setAntiAlias(true);            

Canvas c = new Canvas(output);          
c.drawARGB(0, 0, 0, 0);            
p.setStyle(Style.FILL);            

c.drawCircle((w/2) + 4, (h/2) + 4, radius, p);     

p.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));     

c.drawBitmap(bitmap, 4, 4, p);          
p.setXfermode(null);             
p.setStyle(Style.STROKE);           
p.setColor(Color.WHITE);            
p.setStrokeWidth(3);             
c.drawCircle((w/2) + 4, (h/2) + 4, radius, p);     

return output; 

これには例の鮮やかな影は含まれません。 追加のピクセルでちょっと遊んでみてください。

+0

それはそれをしました、それは素晴らしい仕事をした!ありがとう! – Sebastian

+1

ここから大きな画像を取得するにはどうすればよいですか? –

+0

こんにちは@lovis、定数8と4の使い分けはどのようなものなのですか?さまざまな描画文で幅と高さを追加すると、説明できますか?スクリーン密度dp –