본문 바로가기

나의 플랫폼/안드로이드

[Anroid] 라운딩된 ImageView 만들기

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

기본적으로 가장 이해하기 쉬운 방법은 두개의 뷰를 겹쳐서 나중에 그려지는 이미지를 배경색깔과 동일하게 하는 방법이 있습니다.


하지만, 위 방법은 배경 색깔이 단일할때만 가능합니다.


아래 사이트에 정말 좋은 샘플이 있어 공유 합니다.


Drawable 자체를 타원형태로 그리는 샘플 소스 입니다.


http://www.kmshack.kr/2013/07/%ED%9A%A8%EC%9C%A8%EC%A0%81%EC%9D%B8-bitmap-%EC%9D%B4%EB%AF%B8%EC%A7%80-%EB%9D%BC%EC%9A%B4%EB%94%A9-%EC%B2%98%EB%A6%AC%EB%B0%A9%EB%B2%95/


안드로이드의 Drawable을 이용해서 이미지가  draw될때 이미지를 라운딩 처리해서 그리는 방법이다. 

public class RoundedAvatarDrawable extends Drawable { private final Bitmap mBitmap; private final Paint mPaint; private final RectF mRectF; private final int mBitmapWidth; private final int mBitmapHeight; public RoundedAvatarDrawable(Bitmap bitmap) { mBitmap = bitmap; mRectF = new RectF(); mPaint = new Paint(); mPaint.setAntiAlias(true); mPaint.setDither(true); final BitmapShader shader = new BitmapShader(bitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP); mPaint.setShader(shader); mBitmapWidth = mBitmap.getWidth(); mBitmapHeight = mBitmap.getHeight(); } @Override public void draw(Canvas canvas) { canvas.drawOval(mRectF, mPaint); } @Override protected void onBoundsChange(Rect bounds) { super.onBoundsChange(bounds); mRectF.set(bounds); } @Override public void setAlpha(int alpha) { if (mPaint.getAlpha() != alpha) { mPaint.setAlpha(alpha); invalidateSelf(); } } @Override public void setColorFilter(ColorFilter cf) { mPaint.setColorFilter(cf); } @Override public int getOpacity() { return PixelFormat.TRANSLUCENT; } @Override public int getIntrinsicWidth() { return mBitmapWidth; } @Override public int getIntrinsicHeight() { return mBitmapHeight; } public void setAntiAlias(boolean aa) { mPaint.setAntiAlias(aa); invalidateSelf(); } @Override public void setFilterBitmap(boolean filter) { mPaint.setFilterBitmap(filter); invalidateSelf(); } @Override public void setDither(boolean dither) { mPaint.setDither(dither); invalidateSelf(); } public Bitmap getBitmap() { return mBitmap; } }

## 이블로그는 어디까지는 찾았던 부분을 잊지 않기 위해 올려놓은 것 입니다.

    내용이 부실해도 이해해 주시길 바랍니다.