drcarter의 DevLog

이미지 효과로 이미지 크기의 절반을 반대 되는 이미지를 만들고,
그 반대된 이미지에 대해서는 반사 된 듯한 효과를 주는 소스 입니다.


package com.android.reflection2;

import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.LinearGradient;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.graphics.PorterDuffXfermode;
import android.graphics.Bitmap.Config;
import android.graphics.PorterDuff.Mode;
import android.graphics.Shader.TileMode;
import android.os.Bundle;
import android.widget.ImageView;

public class Reflection extends Activity {
	/** Called when the activity is first created. */

	ImageView view1;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);

		view1 = (ImageView) findViewById(R.id.ImageView01);

		Bitmap bitmapOriginal = BitmapFactory.decodeResource(getResources(),
				R.drawable.android);

		int nWidth = bitmapOriginal.getWidth();
		int nHeight = bitmapOriginal.getHeight();

		Matrix matrix = new Matrix();
		matrix.preScale(1, -1);

		Bitmap bitmapReflection = Bitmap.createBitmap(bitmapOriginal, 0,
				nHeight / 2, nWidth, nHeight / 2, matrix, false);

		Bitmap bitmapOrigianlAndReflection = Bitmap.createBitmap(nWidth,
				(nHeight + nHeight / 2), Config.ARGB_8888);

		Canvas canvas = new Canvas(bitmapOrigianlAndReflection);
		canvas.drawBitmap(bitmapOriginal, 0, 0, null);
		Paint deafaultPaint = new Paint();
		canvas.drawRect(0, nHeight, nWidth, nHeight + 5, deafaultPaint);
		canvas.drawBitmap(bitmapReflection, 0, nHeight + 5, null);

		Paint paint = new Paint();
		LinearGradient shader = new LinearGradient(0, bitmapOriginal
				.getHeight(), 0, bitmapOrigianlAndReflection.getHeight() + 5,
				0x70ffffff, 0x00ffffff, TileMode.CLAMP);
		paint.setShader(shader);
		paint.setXfermode(new PorterDuffXfermode(Mode.DST_IN));
		canvas.drawRect(0, nHeight, nWidth, bitmapOrigianlAndReflection
				.getHeight() + 5, paint);

		view1.setImageBitmap(bitmapOrigianlAndReflection);
	}
}

결과 화면은 이런 식으로 나옵니다.