Matrix涉及到缩放的api主要有:setScale , postScale,preScale及这些方法的重写方法;
Matrix并不会记录画布或view的大小尺寸,故Matrix无法直接提供执行中心缩放的功能,需要我们根据实际的尺寸进行计算和调整缩放中心;
回归正题,以下将简单介绍两种按中心点进行缩放的方法:1、先缩放,再计算平移位置达到中心点;
//scaleX,scaleY分别是X轴和Y轴的缩放比例
mMatrix.setScale(scaleX,scaleY);
//用于接收目标坐标
float[] desPoint = {0f, 0f};
//构建控件或画布大小的坐标 float[] srcPoint = {getWidth() * 1f, getHeight() * 1f};
//映射控件或画布大小缩放后的大小
mMatrix.mapPoints(desPoint,srcPoint);
//计算需要平移的X,Y的坐标,从而达到中心点缩放的目的
float startX =( getWidth() - desPoint[0])/2;
float startY =( getHeight() - desPoint[1])/2;
mMatrix.postTranslate(startX, startY);
2、先计算中心点坐标,再以中心点进行缩放;
//用于接收目标坐标
float[] desPoint = {0f, 0f};
//构建控件或画布大小的坐标
float[] srcPoint = {getWidth() * 1f, getHeight() * 1f};
//映射控件或画布大小缩放后的大小
mMatrix.mapPoints(desPoint,srcPoint);
//该api后面两个参数指定了以哪个点进行缩放的
mMatrix.postScale(scaleX,scaleY,desPoint[0]/2f,desPoint[1]/2f);