要缩放您在画布上绘制的图像:
创建一个 BitmapShader(使用您正在绘制的图像的位图)、一个 Matrix 和一个 Paint:
shader = new BitmapShader(bmp, TileMode.CLAMP, TileMode.CLAMP);
matrix = new Matrix();
shaderPaint = new Paint();
shaderPaint.setShader(shader);
在触摸事件上记录触摸位置(例如在 PointF 中):
zoomPos.x = event.getX();
zoomPos.y = event.getY();
...并设置着色器的矩阵(我在每次触摸时都这样做,可能有更好的方法):
matrix.reset();
matrix.postScale(2f, 2f);
matrix.postTranslate(-zoomPos.x, -zoomPos.y);
shader.setLocalMatrix(matrix);
然后在绘图代码中,使用着色器Paint绘制一个圆。
canvas.drawCircle(zoomPos.x, zoomPos.y, size_of_the_circle, shaderPaint);
编辑
两行:
matrix.postScale(2f, 2f);
matrix.postTranslate(-zoomPos.x, -zoomPos.y);
可以替换为一个:
matrix.postScale(2f, 2f, zoomPos.x, zoomPos.y);
这允许在不破坏偏移的情况下更改比例因子。