我正在研究一些地理问答游戏。
用户必须在地图上找到一些已定义的内容。
我制作了地图点生成器,用于计算相对于图像大小的X和Y位置。 所以地图上的地方的X和Y表示为: float * imageWidth = X. float * imageHeight = Y;
现在,当用户触摸图像视图时,我必须在正确位置的地图上绘制。
当图像视图的比例类型被定义为“FitXY”时,我的代码用这些相对坐标和图像边界的大小来计算位置,并且工作正常,但是地图被拉伸并且看起来不太好。
当我使用“centerInside”比例类型时...地图图像看起来很好,但我的正确位置的坐标并不指向正确的位置。
如何将这些坐标转换为与屏幕上绘制的真实图像相对应?
另外我需要位图的触摸坐标而不是图像视图...所以我可以计算正确位置和触摸位置之间的距离。
如何在ImageView内的屏幕上绘制位图画布?
这对我来说有点混乱......
有什么想法吗?
TNX?
编辑:
到目前为止,这是我的代码:
Drawable drawable = stageImage.getDrawable(); Rect imageBounds = drawable.getBounds();
// height and width of the visible (scaled) image
int scaledHeight = imageBounds.height();
int scaledWidth = imageBounds.width();
Matrix inverse = new Matrix();
stageImage.getImageMatrix().invert(inverse);
// map touch point from ImageView to image
float[] touchPoint = new float[] { event.getX(),
event.getY() };
inverse.mapPoints(touchPoint);
// Relative touch points
float relativeX = touchPoint[0] / scaledWidth;
float relativeY = touchPoint[1] / scaledHeight;
// Prevent errors
if (relativeX < 0) {
relativeX = 0;
}
if (relativeX > 1) {
relativeX = 1;
}
if (relativeY < 0) {
relativeY = 0;
}
if (relativeY > 1) {
relativeY = 1;
}
touchX = event.getX();
touchY = event.getY();
//THIS WORKS FINE!!!!!
// Draw touched point
stageImage.drawTouchedSpot(touchX, touchY);
// Get correct relative position and draw it
double correctRelativeX = gameHandler
.getCurrentMapElement().getxCoordinate()
* imageBounds.width();
double correctRelativeY = gameHandler
.getCurrentMapElement().getyCoordinate()
* imageBounds.height();
//THIS IS NOT RIGHT WHEN STAGE IMAGE SCALE TYPE IS "CENTER INSIDE"
stageImage.drawFlag(correctRelativeX, correctRelativeY);
答案 0 :(得分:0)
您所要做的就是使用ImageView.getImageMatrix()
答案 1 :(得分:0)
我想我找到了所有问题的答案......
我的代码效果很好,这里描述的小魔法:
我已将图像缩放类型设置为“centerInside”,但使用scaleImage()方法我可以调整图像视图的大小以适合我的位图图像......
这样相对坐标是正确的,我可以在定义为正确的地方绘制动画!无论如何,Tnx!
如果你有更好的想法...我很乐意尝试...我想这不是最优化的方法
答案 2 :(得分:0)
这里的映射应该已经考虑了缩放的宽度/高度
float[] touchPoint = new float[] { event.getX(), event.getY() };
inverse.mapPoints(touchPoint);
所以我不相信你需要这个:
// Relative touch points
float relativeX = touchPoint[0] / scaledWidth;
float relativeY = touchPoint[1] / scaledHeight;
另外,请尝试将比例类型更改为SCALE_TYPE.MATRIX,然后使用imageView&#39; getImageMatrix()
修改视图。