网上很多的倒影特效实际上就是一个对称变换,在改变透明度即可。

Matrix对称变换包括很多种,有关于Y轴对称,关于X轴对称,关于y= -x对称等等。

1 关于Y轴对称

[java] view plaincopy
  1. // 获取资源文件的引用res
  2. Resources res = getResources();
  3. // 获取图形资源文件
  4. Bitmap bmp = BitmapFactory.decodeResource(res, R.drawable.v);
  5. // 设置canvas画布背景为白色
  6. canvas.drawColor(Color.BLACK);
  7. // 在画布上绘制缩放之前的位图,以做对比
  8. //屏幕上的位置坐标是0,0
  9. canvas.drawBitmap(bmp, 0, 0, null);
  10. // 定义矩阵对象
  11. Matrix matrix = new Matrix();
  12. float[] values ={-1f,0.0f,0.0f,0.0f,1f,0.0f,0.0f,0.0f,1.0f};
  13. matrix.setValues(values);
  14. System.out.println("matrix:" + matrix.toString());
  15. Bitmap dstbmp = Bitmap.createBitmap(bmp, 0, 0, bmp.getWidth(), bmp.getHeight(),
  16. matrix, true);
  17. canvas.drawBitmap(dstbmp, bmp.getWidth(), 0, null);

屏幕上包括两幅图片,一张原图,一张对称图,来形成对比效应。

2 关于X轴对称

[java] view plaincopy
  1. // 获取资源文件的引用res
  2. Resources res = getResources();
  3. // 获取图形资源文件
  4. Bitmap bmp = BitmapFactory.decodeResource(res, R.drawable.v);
  5. // 设置canvas画布背景为白色
  6. canvas.drawColor(Color.BLACK);
  7. // 在画布上绘制缩放之前的位图,以做对比
  8. //屏幕上的位置坐标是0,0
  9. canvas.drawBitmap(bmp, 0, 0, null);
  10. // 定义矩阵对象
  11. Matrix matrix = new Matrix();
  12. float[] values ={1f,0.0f,0.0f,0.0f,-1f,0.0f,0.0f,0.0f,1.0f};
  13. matrix.setValues(values);
  14. System.out.println("matrix:" + matrix.toString());
  15. Bitmap dstbmp = Bitmap.createBitmap(bmp, 0, 0, bmp.getWidth(), bmp.getHeight(),
  16. matrix, true);
  17. canvas.drawBitmap(dstbmp, 0, bmp.getHeight(), null);

3 关于原点对称

[java] view plaincopy
  1. // 获取资源文件的引用res
  2. Resources res = getResources();
  3. // 获取图形资源文件
  4. Bitmap bmp = BitmapFactory.decodeResource(res, R.drawable.v);
  5. // 设置canvas画布背景为白色
  6. canvas.drawColor(Color.BLACK);
  7. // 在画布上绘制缩放之前的位图,以做对比
  8. //屏幕上的位置坐标是0,0
  9. canvas.drawBitmap(bmp, 0, 0, null);
  10. // 定义矩阵对象
  11. Matrix matrix = new Matrix();
  12. float[] values ={-1f,0.0f,0.0f,0.0f,-1f,0.0f,0.0f,0.0f,1.0f};
  13. matrix.setValues(values);
  14. System.out.println("matrix:" + matrix.toString());
  15. Bitmap dstbmp = Bitmap.createBitmap(bmp, 0, 0, bmp.getWidth(), bmp.getHeight(),
  16. matrix, true);
  17. canvas.drawBitmap(dstbmp, bmp.getWidth(), bmp.getHeight(), null);

4 关于y = x 对称

[java] view plaincopy
  1. // 获取资源文件的引用res
  2. Resources res = getResources();
  3. // 获取图形资源文件
  4. Bitmap bmp = BitmapFactory.decodeResource(res, R.drawable.v);
  5. // 设置canvas画布背景为白色
  6. canvas.drawColor(Color.BLACK);
  7. // 在画布上绘制缩放之前的位图,以做对比
  8. //屏幕上的位置坐标是0,0
  9. canvas.drawBitmap(bmp, 0, 0, null);
  10. // 定义矩阵对象
  11. Matrix matrix = new Matrix();
  12. float[] values ={0f,1f,0.0f,1f,0f,0.0f,0.0f,0.0f,1.0f};
  13. matrix.setValues(values);
  14. System.out.println("matrix:" + matrix.toString());
  15. Bitmap dstbmp = Bitmap.createBitmap(bmp, 0, 0, bmp.getWidth(), bmp.getHeight(),
  16. matrix, true);
  17. canvas.drawBitmap(dstbmp, bmp.getWidth(), bmp.getHeight(), null);

5 关于y = -x对称

[java] view plaincopy
  1. // 获取资源文件的引用res
  2. Resources res = getResources();
  3. // 获取图形资源文件
  4. Bitmap bmp = BitmapFactory.decodeResource(res, R.drawable.v);
  5. // 设置canvas画布背景为白色
  6. canvas.drawColor(Color.BLACK);
  7. // 在画布上绘制缩放之前的位图,以做对比
  8. //屏幕上的位置坐标是0,0
  9. canvas.drawBitmap(bmp, bmp.getHeight(), 0, null);
  10. // 定义矩阵对象
  11. Matrix matrix = new Matrix();
  12. float[] values ={0f,-1f,0.0f,-1f,0f,0.0f,0.0f,0.0f,1.0f};
  13. matrix.setValues(values);
  14. System.out.println("matrix:" + matrix.toString());
  15. Bitmap dstbmp = Bitmap.createBitmap(bmp, 0, 0, bmp.getWidth(), bmp.getHeight(),
  16. matrix, true);
  17. canvas.drawBitmap(dstbmp, 0, bmp.getHeight(), null);

转载于:https://www.cnblogs.com/Free-Thinker/p/6721779.html

Android学习笔记进阶九之Matrix对称变换相关推荐

  1. Android学习笔记进阶十之Matrix错切变换

    刚开始我也不懂啥叫错切变换,一看效果图你就恍然大悟. 对图像的错切变换做个总结: x = x0 + b*y0; y = d*x0 + y0; 与之对应的方法是: [java] view plainco ...

  2. 【转】 Pro Android学习笔记(九一):了解Handler(5):组件生命

    文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注册等附加条件.转载须注明出处:http://blog.csdn.net/flowingflying/ 对于activity,消息是在OnCrea ...

  3. Android学习笔记进阶十一图片动画播放(AnimationDrawable)

    大家平时见到的最多的可能就是Frame动画了,Android中当然也少不了它.它的使用更加简单,只需要创建一个 AnimationDrawabledF对象来表示Frame动画,然后通过addFrame ...

  4. Android学习笔记进阶十三获得本地全部照片

    这是Intent的一个用法. 在ActivityAction里面有一个"ACTION_GET_CONTENT"字符串常量,该常量让用户选择特定类型的数据. intent.setTy ...

  5. android给图片加边框,Android学习笔记进阶19之给图片加边框

    //设置颜色 public void setColour(int color){ co = color; } //设置边框宽度 public void setBorderWidth(int width ...

  6. Android学习笔记进阶20之得到图片的缩略图

    <1>简介 之前往往是通过Bitmap.Drawable和Canvas配合完成,需要写一系列繁杂的逻辑去缩小原有图片,从而得到缩略图. 现在我给大家介绍一种比较简单的方法:(网上有) 在A ...

  7. Android学习笔记(九)——Activity的跳转和数据传递

    ---------由AActivity跳转到BActivity-------- 显式跳转1(最常用的方法) mbtnjump.setOnClickListener(new View.OnClickLi ...

  8. Android学习笔记(九)——更复杂的进度对话框

    显示操作进度的对话框 1.使用上一篇创建的同一项目.在activity_main.xml文件里加入一个Button: <Buttonandroid:id="@+id/btn_dialo ...

  9. Android 学习笔记之九 下拉刷新

    下拉刷新控件终结者:PullToRefreshLayout 转载请声明出处http://blog.csdn.net/zhongkejingwang/article/details/38868463 源 ...

最新文章

  1. linux启动时间极限优化,Linux启动时间的极限优化
  2. 3.7python怎么安装清屏_python3.7中怎么清屏
  3. fiddler everywhere手机抓包_基于移动端抓包使用Fiddler模拟弱网测试
  4. Linux日志查看head与tail配合查看区间行数的内容
  5. android 创建文件夹_Android 动画小记
  6. 二叉树层序遍历_求二叉树的层序遍历
  7. 怎么用shell ssh,然后再exit?
  8. java 元数据 注解_Java元数据总结:Java注释的使用和定义
  9. 4.FX Blue 本地跟单软件EA参数说明
  10. abaqus 录制结果动画_录制和编辑动画 | Adobe Character Animator 教程
  11. compare和compareTo方法的区别
  12. c语言大小箱子,基于C语言箱子游戏.doc
  13. 波特率、比特、字、千字节、兆、G之间转换
  14. Mysql 连环20问
  15. Python-项目实战-《外星人入侵》Pygame小游戏-阶段二:外星人来了
  16. c语言汉诺塔实验报告,C语言汉诺塔的简单了解
  17. 【TensorflowTTS 中文语音生成 Win10】
  18. 一些非主流搜索引擎的优化
  19. Learning Without Forgetting 笔记及实现
  20. [安装之5] Mac pro更换大内存固态硬盘实践教程

热门文章

  1. B-tree索引与Bitmap索引的对比测试
  2. 转载CSDN - 从程序员到HR——面试经验分享
  3. 简单文件传输协议TFTP分析还原
  4. Python中if语句练习题
  5. nsq php,Nsq从入门到实践
  6. Python求100以内的素数和并输出
  7. vba保存文件为xlsx格式_Vba把Excel某个范围保存为XLS工作薄文件
  8. python 列表维度_如何输出python中list的维度
  9. Java中final关键字如何使用?
  10. [Vue CLI 3] 源码之 webpack-chain