ImageView 에 이미지를 보여줄 때, Round 처리를 해줘야 할 때가 있다.
서버에서 이미지가 내려올 때는 사용자가 이미 올린 이미지 이므로, 디자이너가 가공해주지 않는 이상 개발자가 이 부분을 해주어야 한다.
소스는 쉽게 찾을 수 있었다.
Bitmap 을 가지고 가로 세로를 구한 후, Rect를 구성하고 Canvas에 다시 그리는 식이다.
아래 roundPx 변수가 Round 되는 반경인데 45로 해두었다. Circle 형태가 필요했으므로^^
원하는 대로 roundPx 수치만 변경하면 된다.
import android.graphics.Bitmap; import android.graphics.BitmapShader; import android.graphics.Canvas; import android.graphics.ColorFilter; import android.graphics.Paint; import android.graphics.PixelFormat; import android.graphics.Rect; import android.graphics.RectF; import android.graphics.Shader; import android.graphics.drawable.Drawable; public class BitmapRoundDrawable extends Drawable { private Bitmap _bitmap; private Paint _paint; private RectF _rectF; private int _bitmapWidth; private int _bitmapHeight; private int roundPx = 45; //Round Area public BitmapRoundDrawable(Bitmap bitmap) { _bitmap = bitmap; _bitmapWidth = _bitmap.getWidth(); _bitmapHeight = _bitmap.getHeight(); Rect rect = new Rect(0, 0, _bitmapWidth, _bitmapHeight); _rectF = new RectF(rect); _paint = new Paint(); _paint.setAntiAlias(true); _paint.setDither(true); BitmapShader shader = new BitmapShader(_bitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP); _paint.setShader(shader); } @Override public void draw(Canvas canvas) { // canvas.drawOval(_rectF, _paint); canvas.drawRoundRect(_rectF, roundPx, roundPx, _paint); } @Override protected void onBoundsChange(Rect bounds) { super.onBoundsChange(bounds); _rectF.set(bounds); } @Override public void setAlpha(int alpha) { if(_paint.getAlpha() != alpha) { _paint.setAlpha(alpha); invalidateSelf(); } } @Override public void setColorFilter(ColorFilter cf) { _paint.setColorFilter(cf); } @Override public int getOpacity() { return PixelFormat.TRANSLUCENT; } @Override public int getIntrinsicWidth() { return _bitmapWidth; } @Override public int getIntrinsicHeight() { return _bitmapHeight; } public void setAntiAlias(boolean aa) { _paint.setAntiAlias(aa); invalidateSelf(); } @Override public void setFilterBitmap(boolean filter) { _paint.setFilterBitmap(filter); invalidateSelf(); } @Override public void setDither(boolean dither) { _paint.setDither(dither); invalidateSelf(); } public Bitmap getBitmap() { if(_bitmap != null) return _bitmap; return null; } }출처 : http://magicslot.blogspot.kr/2013/09/rounded-corner-imageview.html
'안드로이드' 카테고리의 다른 글
TextView Font Size 코드 (0) | 2014.11.06 |
---|---|
InputStream > Byte Array (0) | 2014.07.17 |
ViewPager (0) | 2014.05.15 |
DrawerLayout (0) | 2014.05.15 |
TableRow를 동적으로 만들기 (0) | 2014.04.23 |