안드로이드

[Android] 이미지에 그림자 넣기

부르스리 2015. 4. 16. 14:33
반응형


이미지에 그림자를 넣으려면...


배경이미지를 깔아주면 되는데 이건 영역 자체에 깔리는 거니까 모양과 상관이 없다.


이미지 모양대로 그림자를 깔아주려면 뭘 좀 해줘야겠지.


아래 함수를 사용하면 된다.


public Bitmap addShadow(final Bitmap bm, final int dstHeight, final int dstWidth, int size, float dx, float dy, int color, int alpha) {
		    final Bitmap mask = Bitmap.createBitmap(dstWidth, dstHeight, Config.ALPHA_8);

		    final Matrix scaleToFit = new Matrix();
		    final RectF src = new RectF(0, 0, bm.getWidth(), bm.getHeight());
		    final RectF dst = new RectF(0, 0, dstWidth - dx, dstHeight - dy);
		    scaleToFit.setRectToRect(src, dst, ScaleToFit.CENTER);

		    final Matrix dropShadow = new Matrix(scaleToFit);
		    dropShadow.postTranslate(dx, dy);

		    final Canvas maskCanvas = new Canvas(mask);
		    final Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
		    maskCanvas.drawBitmap(bm, scaleToFit, paint);
		    paint.setXfermode(new PorterDuffXfermode(Mode.SRC_OUT));
		    maskCanvas.drawBitmap(bm, dropShadow, paint);

		    final BlurMaskFilter filter = new BlurMaskFilter(size, Blur.SOLID);
		    paint.reset();
		    paint.setAntiAlias(true);
		    paint.setColor(color);
		    paint.setAlpha(alpha);
		    paint.setMaskFilter(filter);
		    paint.setFilterBitmap(true);

		    final Bitmap ret = Bitmap.createBitmap(dstWidth, dstHeight, Config.ARGB_8888);
		    final Canvas retCanvas = new Canvas(ret);
		    retCanvas.drawBitmap(mask, 0,  0, paint);
		    retCanvas.drawBitmap(bm, scaleToFit, null);
		    mask.recycle();
		    return ret;
		}


원본 이미지와 여러 값들을 넣으면 그림자를 넣은 Bitmap 을 반환하는 함수다.


Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher);
		Bitmap bmp2 = addShadow(bmp, bmp.getHeight(), bmp.getWidth(), 2, 3, 3, Color.RED, 80);
		iv.setImageBitmap(bmp2);


이런식으로 호출해주면 아래와 같이 나온다.






반응형