이미지 효과로 이미지 크기의 절반을 반대 되는 이미지를 만들고,
그 반대된 이미지에 대해서는 반사 된 듯한 효과를 주는 소스 입니다.
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);
}
}
결과 화면은 이런 식으로 나옵니다.