Bitmap Round

안드로이드 2014. 6. 5. 11:32
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
Posted by 자바리즘
,