• Android学习笔记进阶九之Matrix对称变换


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

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

    1 关于Y轴对称

    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轴对称

    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 关于原点对称

    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 对称

    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对称

    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);  


  • 相关阅读:
    代理模式
    工厂模式
    Mysql索引数据结构为什么是B+树?
    mxgraph中mxStencil使用经验
    !dbobji.cpp@8615
    ForkJoinPool线程池
    保障线程安全的设计技术
    Java利用线程工厂监控线程池
    使用Arthas分析线上问题
    使用规则执行器代替 if else 判断
  • 原文地址:https://www.cnblogs.com/Free-Thinker/p/6721779.html
Copyright © 2020-2023  润新知