Matrix
-
Matrix是什么?
Matrix也就是矩阵的意思,其实我们通常使用它进行一些图形变换的操作,例如:旋转,平移,缩放,错切等 -
Matrix可以实现什么效果?
图片的平移,旋转,缩放,错切,图片水印等效果
-
常用api?
Matrix的动作有三种,分别是:pre ,post,set
(1). pre 代表着如果之前有过操作,乖乖排队。
(2). post 代表着插队到第一个。
(3). set 代表着,设置
平移(Translation)变换
Translation的变换是通过改变MTRANS_X和MTRANS_Y来实现的,Matrix提供了三个方法
preTranslate(float dx, float dy)
setTranslate(float dx, float dy)
postTranslate(float dx, float dy)
扭曲(Skew)变换
skew变换是通过改变MSKEW_X,和MSKEW_Y来实现的,Matrix提供了下面的几个方法来设置skew
matrix.setSkew(kx,ky)
matrix.setSkew(kx,ky, px, py)
matrix.preSkew(kx,ky)
matrix.preSkew(kx,ky, px, py)
matrix.postSkew(kx,ky)
matrix.postSkew(kx,ky, px, py)
skew的变换是如下的规律:
点(x,y)经过skew(kx,ky,px,py)变换之后,坐标为(kx*(y-py)+px,ky*(x-px)+py),如果,px和py没有,则默认为都为0。
旋转(Rotate)的变换
matrix.setRotate(degrees)
matrix.setRotate(degrees, px, py)
matrix.preRotate(degrees)
matrix.preRotate(degrees, px, py)
matrix.postRotate(degrees)
matrix.postRotate(degrees, px, py)
degrees即我们要旋转的度数,px,py是我们旋转的角度通过这个设置
缩放
setScale(float sx,float sy, float px, float py)
setScale(float sx,float sy);
sx,sy 缩放的倍数,px,py中心点
自定义ImageView
package com.example.matrixdemo;
import android.annotation.SuppressLint;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.widget.ImageView;
@SuppressLint("AppCompatCustomView")
public class MainImageView extends ImageView {
private Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
private Matrix matrix = new Matrix();
private Bitmap bitmap;
public MainImageView(Context context, AttributeSet attrs) {
super(context, attrs);
bitmap = BitmapFactory.decodeResource(getResources(),R.mipmap.ic_launcher);
}
//平移方法
public void translationBitmap(){
//dx与dy->x轴与y轴平移的像素->
matrix.reset();
matrix.preTranslate(100f,100f);
invalidate();//重新绘制view
}
//缩放方法
public void scallBitmap(){
matrix.reset();
matrix.preScale(2f