网上很多的倒影特效实际上就是一个对称变换,在改变透明度即可。
Matrix对称变换包括很多种,有关于Y轴对称,关于X轴对称,关于y= -x对称等等。
1 关于Y轴对称
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
|
// 获取资源文件的引用res
Resources res = getResources();
// 获取图形资源文件
Bitmap bmp = BitmapFactory.decodeResource(res, R.drawable.v);
// 设置canvas画布背景为白色
canvas.drawColor(Color.BLACK);
// 在画布上绘制缩放之前的位图,以做对比
//屏幕上的位置坐标是0,0
canvas.drawBitmap(bmp,
0
,
0
,
null
);
// 定义矩阵对象
Matrix matrix =
new
Matrix();
float
[] values ={-1f,
0
.0f,
0
.0f,
0
.0f,1f,
0
.0f,
0
.0f,
0
.0f,
1
.0f};
matrix.setValues(values);
System.out.println(
"matrix:"
+ matrix.toString());
Bitmap dstbmp = Bitmap.createBitmap(bmp,
0
,
0
, bmp.getWidth(), bmp.getHeight(),
matrix,
true
);
canvas.drawBitmap(dstbmp, bmp.getWidth(),
0
,
null
);
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
|
// 获取资源文件的引用res
Resources res = getResources();
// 获取图形资源文件
Bitmap bmp = BitmapFactory.decodeResource(res, R.drawable.v);
// 设置canvas画布背景为白色
canvas.drawColor(Color.BLACK);
// 在画布上绘制缩放之前的位图,以做对比
//屏幕上的位置坐标是0,0
canvas.drawBitmap(bmp,
0
,
0
,
null
);
// 定义矩阵对象
Matrix matrix =
new
Matrix();
float
[] values ={1f,
0
.0f,
0
.0f,
0
.0f,-1f,
0
.0f,
0
.0f,
0
.0f,
1
.0f};
matrix.setValues(values);
System.out.println(
"matrix:"
+ matrix.toString());
Bitmap dstbmp = Bitmap.createBitmap(bmp,
0
,
0
, bmp.getWidth(), bmp.getHeight(),
matrix,
true
);
canvas.drawBitmap(dstbmp,
0
, bmp.getHeight(),
null
);
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
|
// 获取资源文件的引用res
Resources res = getResources();
// 获取图形资源文件
Bitmap bmp = BitmapFactory.decodeResource(res, R.drawable.v);
// 设置canvas画布背景为白色
canvas.drawColor(Color.BLACK);
// 在画布上绘制缩放之前的位图,以做对比
//屏幕上的位置坐标是0,0
canvas.drawBitmap(bmp,
0
,
0
,
null
);
// 定义矩阵对象
Matrix matrix =
new
Matrix();
float
[] values ={-1f,
0
.0f,
0
.0f,
0
.0f,-1f,
0
.0f,
0
.0f,
0
.0f,
1
.0f};
matrix.setValues(values);
System.out.println(
"matrix:"
+ matrix.toString());
Bitmap dstbmp = Bitmap.createBitmap(bmp,
0
,
0
, bmp.getWidth(), bmp.getHeight(),
matrix,
true
);
canvas.drawBitmap(dstbmp, bmp.getWidth(), bmp.getHeight(),
null
);
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
|
// 获取资源文件的引用res
Resources res = getResources();
// 获取图形资源文件
Bitmap bmp = BitmapFactory.decodeResource(res, R.drawable.v);
// 设置canvas画布背景为白色
canvas.drawColor(Color.BLACK);
// 在画布上绘制缩放之前的位图,以做对比
//屏幕上的位置坐标是0,0
canvas.drawBitmap(bmp,
0
,
0
,
null
);
// 定义矩阵对象
Matrix matrix =
new
Matrix();
float
[] values ={0f,1f,
0
.0f,1f,0f,
0
.0f,
0
.0f,
0
.0f,
1
.0f};
matrix.setValues(values);
System.out.println(
"matrix:"
+ matrix.toString());
Bitmap dstbmp = Bitmap.createBitmap(bmp,
0
,
0
, bmp.getWidth(), bmp.getHeight(),
matrix,
true
);
canvas.drawBitmap(dstbmp, bmp.getWidth(), bmp.getHeight(),
null
);
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
|
// 获取资源文件的引用res
Resources res = getResources();
// 获取图形资源文件
Bitmap bmp = BitmapFactory.decodeResource(res, R.drawable.v);
// 设置canvas画布背景为白色
canvas.drawColor(Color.BLACK);
// 在画布上绘制缩放之前的位图,以做对比
//屏幕上的位置坐标是0,0
canvas.drawBitmap(bmp, bmp.getHeight(),
0
,
null
);
// 定义矩阵对象
Matrix matrix =
new
Matrix();
float
[] values ={0f,-1f,
0
.0f,-1f,0f,
0
.0f,
0
.0f,
0
.0f,
1
.0f};
matrix.setValues(values);
System.out.println(
"matrix:"
+ matrix.toString());
Bitmap dstbmp = Bitmap.createBitmap(bmp,
0
,
0
, bmp.getWidth(), bmp.getHeight(),
matrix,
true
);
canvas.drawBitmap(dstbmp,
0
, bmp.getHeight(),
null
);
|