我有一个扩展SurfaceView的自定义视图。我正在画布上画一个图像。当用户触摸画布上的某个点时,我想要显示触摸坐标周围区域的放大视图。并且最好,当手指移动时,我想相应地更新放大视图的内容。
我想知道android平台本机是否支持这样的功能。如果没有,你们中的一个人能否指出一个很好的例子,可以让我开始或分享如何实现它的想法。我没有做太多这种2D或3D图形,我仍然试图理解Canvas和Matrix Classes以了解我可以使用的内容。
我在论坛上搜索了一个类似的问题,但找不到任何问题。所以,请不要标记我提出已经存在的问题。
不 - 我没有使用OpenGL-ES或任何此类第三方库(还)。
全部谢谢。
答案 0 :(得分: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);
这允许在不破坏偏移的情况下更改比例因子。