2

我有一个扩展 SurfaceView 的自定义视图。我正在画布上绘制图像。当用户触摸画布上的一个点时,我想显示触摸坐标周围区域的放大视图。最好是,随着手指四处移动,我想相应地更新放大视图的内容。

我想知道android平台是否本机支持这样的功能。如果没有,你们中的哪一个可以指出一个很好的例子,可以让我开始或分享如何实施它的想法。我不做太多这类 2D 或 3D 图形,我仍在尝试了解 Canvas 和 Matrix 类,看看我可以使用什么。

我在论坛上搜索了类似的问题,但找不到任何问题。所以,请不要因为我问了一个已经存在的问题而标记我。

不 - 我没有使用 OpenGL-ES 或任何此类 3rd 方库(还)。

谢谢大家。

4

1 回答 1

9

要缩放您在画布上绘制的图像:

创建一个 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);

这允许在不破坏偏移的情况下更改比例因子。

于 2012-07-12T11:25:21.477 回答