最近在使用Matrix进行绘图的操作。对Matrix的一些方法有了一些更深的体会,记下来,以便日后复习。
Matrix常用的方法:
一、变换方法:
Matrix提供了translate(平移)、rotate(旋转)、scale(缩放)、skew(倾斜)四种操作,这四种操作的内部实现过程都是通过matrix.setValues(…)来设置矩阵的值来达到变换图片的效果。
Matrix的每种操作都有set、pre、post三种操作,set是清空队列再添加,pre是在队列最前面插入,post是在队列最后面插入。
pre方法表示矩阵前乘,例如:变换矩阵为A,原始矩阵为B,pre方法的含义即是A*B
post方法表示矩阵后乘,例如:变换矩阵为A,原始矩阵为B,post方法的含义即是B*A
1.matrix.preScale(0.5f, 1);
2.matrix.preTranslate(10, 0);
3.matrix.postScale(0.7f, 1);
4.matrix.postTranslate(15, 0);
等价于:
translate(10, 0) -> scale(0.5f, 1) -> scale(0.7f, 1) -> translate(15, 0)
注意:后调用的pre操作先执行,而后调用的post操作则后执行。
set方法一旦调用即会清空之前matrix中的所有变换,例如:
1.matrix.preScale(0.5f, 1);
2.matrix.setScale(1, 0.6f);
3.matrix.postScale(0.7f, 1);
4.matrix.preTranslate(15, 0);
等价于
translate(15, 0) -> scale(1, 0.6f) -> scale(0.7f, 1)
matrix.preScale (0.5f, 1)将不起作用。
二、映射方法
Matrix提供了mapXXX的方法,用于获取经matrix映射之后的值。主要有:mapPoints,mapRects,mapVectors等方法。
这些方法你会使用到:在你需要记住matrix操作之后的数值的时候。比如:记住矩形旋转34°(rotate)之后四个点的坐标。(你可以尝试着自己计算,你会发现很复杂,还不精确)
需要注意的是,matrix的某些方法使用到中心点的时候,如果不设置,默认是以(0,0)为中心点的。
记下来,以免忘记。
三、制作倒影效果
利用matrix可以实现各种图片的特效,接下来就用marix加上渐变色实现图片倒影的效果,步骤如下:
1. 获取需要倒影效果的图片,这里取原图片的一半
2. 添加颜色渐变到倒影图片上
具体的实现如下面代码所述,我们以一种自定义view的形式给出效果图,代码如下:
package com.flection.view; import com.flection.main.R; import android.annotation.SuppressLint; import android.content.Context; import android.graphics.Bitmap; import android.graphics.Bitmap.Config; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.LinearGradient; import android.graphics.Matrix; import android.graphics.Paint; import android.graphics.PorterDuffXfermode; import android.graphics.Shader.TileMode; import android.graphics.drawable.BitmapDrawable; import android.util.AttributeSet; import android.view.View; public class FlectionView extends View { Context mContext=null; public FlectionView(Context context) { super(context); } public FlectionView(Context context, AttributeSet attrs) { super(context, attrs); this.mContext=context; } @SuppressLint("DrawAllocation") @Override protected void onDraw(Canvas canvas) { //设置背景色 this.setBackgroundColor(Color.parseColor("#8B8378")); Bitmap oldBitmap = BitmapFactory.decodeResource(mContext.getResources(),R.drawable.dropbox); Bitmap newBitmap = createFlectionBitmap(oldBitmap); canvas.drawBitmap(newBitmap,newBitmap.getWidth() ,newBitmap.getHeight(), new Paint()); this.invalidate(); } //获取原图+倒影图的bitmap private Bitmap createFlectionBitmap(Bitmap oldBitmap) { int mWidth = oldBitmap.getWidth(); int mHeight = oldBitmap.getHeight(); //原图和倒影图之间的缝隙 int gap = 2; Matrix matrix = new Matrix(); matrix.preScale(1, -1); Bitmap flection = Bitmap.createBitmap(oldBitmap, 0, mHeight / 2, mWidth, mHeight / 2, matrix, false); Bitmap background = Bitmap.createBitmap(mWidth, mHeight+gap+mHeight/2, Config.ARGB_8888); Canvas canvas = new Canvas(background); Paint p1 = new Paint(); //画出原图 canvas.drawBitmap(oldBitmap, 0, 0, p1); //画出倒影图 canvas.drawBitmap(flection, 0, mHeight+gap, p1); Paint shaderPaint = new Paint(); LinearGradient shader = new LinearGradient(0, mHeight, 0, flection.getHeight(), 0x70ffffff, 0x00ffffff, TileMode.MIRROR); shaderPaint.setShader(shader); shaderPaint.setXfermode(new PorterDuffXfermode(android.graphics.PorterDuff.Mode.DST_IN)); //画出渐变颜色 canvas.drawRect(0, mHeight+gap, mWidth, background.getHeight(), shaderPaint); return background; } }
实现的效果如下图:
在CSS3之前,要在网页中使用倒影效果,只能事先使用 photoshop 将倒影设计好,然后导入到网页中,这不但耗费资源,而且影响开发的效率。 CSS3中,新增了 box-reflect属性,通过该属性为元素添加倒影效果。语法格式为: box-reflect:<direction> <offset>? <mask-box-image>? 也就是说,在 box-reflect属性中,通过 dire
本文向大家介绍Android编程实现文字倒影效果的方法,包括了Android编程实现文字倒影效果的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Android编程实现文字倒影效果的方法。分享给大家供大家参考,具体如下: 我们所有的view都继承自View类,View类里有个方法叫ondraw(). 即,我们看到的界面都是画出来的,所以我们可以重写ondraw()方法。 既然知道了这点
在我的Android应用程序,我需要变形的图像从一个点到另一个点。看起来应该是那样的 原点A和B是A的新位置 我尝试使用“drawBitmapMesh”函数使其成为可能,但没有达到,以下是包装代码: 公共空隙扭曲(浮动起点TX、浮动起点、浮动终点X、浮动终点Y){
本文向大家介绍Android使用Canvas绘制圆形进度条效果,包括了Android使用Canvas绘制圆形进度条效果的使用技巧和注意事项,需要的朋友参考一下 前言 Android自定义控件经常会用到Canvas绘制2D图形,在优化自己自定义控件技能之前,必须熟练掌握Canvas绘图机制。本文从以下三个方面对Canvas绘图机制进行讲解: 画布Canvas 画笔Paint 示例圆形进度条 画布Ca
本文向大家介绍Android实现图片阴影效果的方法,包括了Android实现图片阴影效果的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例介绍了Android实现图片阴影效果,设置画布颜色,图像倾斜效果,图片阴影效果的方法,采用canvas.save(Canvas.MATRIX_SAVE_FLAG);来实现。由于图片的实际尺寸比显示出来的图像要大一些,因此需要适当更改下大小,以达到较好的效果
利用操控变形功能,您可以扭转和扭曲图稿的某些部分,使变换看起来更自然。您可以使用 Illustrator 中的操控变形工具添加、移动和旋转点,以便将您的图稿平滑地转换到不同的位置以及变换成不同的姿态。 选择要变换的图稿。 从工具栏中选择“操控变形”工具。 默认情况下,Illustrator 可识别用于变换图稿的相应区域,并自动向图稿中添加多个字,以便通过最合适的方式来对图稿进行变形。选择操控变形工
我想读取数据并绘制动态图,所以我学习了使用PyQt5的matplotlib。我找到了一个例子,但它是针对PyQt4的。我将其修改为PyQt5,但它有一些问题,当我单击开始按钮时,它显示错误 回溯(最后一次调用):文件“/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site packages/matplotlib/ba
Drawing attractive figures is important. When making figures for yourself, as you explore a dataset, it’s nice to have plots that are pleasant to look at. Visualizations are also central to communicat