我有一个延伸SurfaceView自定义视图。 我在画布上绘制图像。 当用户触摸在画布上的一个点,我想说明各地触摸坐标区域的放大图。 并且优选地,作为手指来回移动,我想相应地更新放大视图的内容。
我在想,如果Android平台支持这样的功能本身。 如果没有,你一个指向我,可以让我开始或分享如何实现它的想法一个很好的例子。 我没有做很多2D或这类3D图形,现在还在试图了解Canvas和矩阵类,看看有什么我可以使用。
我搜索了论坛,类似的问题,但找不到任何。 所以,请询问已经存在的问题,不旗我。
而且没有 - 我没有使用OpenGL-ES或任何这样的第三方库(还)。
感谢所有。
要缩小你的画布上绘制图像:
创建BitmapShader(使用你绘制图像的位图),矩阵和油漆:
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);
然后在绘制代码,绘制使用着色器绘制一个圆。
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);
这使得没有受到破坏的补偿要更改的比例因子。