[android] Circular Bitmap 만들기 ( 동그란 프로필 사진 )
http://frogermcs.github.io/InstaMaterial-concept-part-6-user-profile/
-
public class CircleTransformation implements Transformation {
private static final int STROKE_WIDTH = 6;
@Override
public Bitmap transform(Bitmap source) {
int size = Math.min(source.getWidth(), source.getHeight());
int x = (source.getWidth() - size) / 2;
int y = (source.getHeight() - size) / 2;
Bitmap squaredBitmap = Bitmap.createBitmap(source, x, y, size, size);
if (squaredBitmap != source) {
source.recycle();
}
Bitmap bitmap = Bitmap.createBitmap(size, size, source.getConfig());
Canvas canvas = new Canvas(bitmap);
Paint avatarPaint = new Paint();
BitmapShader shader = new BitmapShader(squaredBitmap, BitmapShader.TileMode.CLAMP, BitmapShader.TileMode.CLAMP); // bound 를 넘어가면 edge color 로 채움
avatarPaint.setShader(shader);
Paint outlinePaint = new Paint();
outlinePaint.setColor(Color.WHITE);
outlinePaint.setStyle(Paint.Style.STROKE);
outlinePaint.setStrokeWidth(STROKE_WIDTH);
outlinePaint.setAntiAlias(true);
float r = size / 2f;
canvas.drawCircle(r, r, r, avatarPaint); // cx, cy, radius, paint
canvas.drawCircle(r, r, r - STROKE_WIDTH / 2, outlinePaint);
squaredBitmap.recycle();
return bitmap;
}
@Override
public String key() {
return "circleTransformation()";
}
}
'프로그래밍 놀이터 > 안드로이드, Java' 카테고리의 다른 글
[android] 원형 progress view 그리기 (0) | 2017.07.15 |
---|---|
[android] Circular Reveal 만들기 (0) | 2017.07.14 |
[android] 특정 위치에 popup window 띄우기 (2) | 2017.07.12 |
[android] list view 의 아이템 하나씩 나타나는 animation 효과 주기 (0) | 2017.07.11 |
[android] click 위치로부터 화면(Activity) 전개하는 animation 넣기 (0) | 2017.07.10 |
댓글