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 |



