0

安卓问题。我制作了一个自定义 ImageView 类,在其中我有一个 onDraw 方法,它将在特定像素上绘制一个圆圈(使用画布)。当我使用这个自定义图像视图并打开我的图像时,我想将焦点设置在我绘制的圆圈上(例如,就像谷歌地图对您当前的位置所做的那样。焦点设置为您当前的点)

4

1 回答 1

0

地图服务器在谷歌上所做的是提供一组定制的图块,以便正确显示中心,较新的版本当然是基于矢量的,因此他们只需绘制视图,使其居中位于他们想要的位置。

在不知道您可能需要的应用程序的详细信息的情况下

创建自己的容器类,可能是 FrameLayout

public class myMapFrameLayout extends FrameLayout {

覆盖 onDraw 或 onDispatchDraw 以便您可以适当地布局您的图块

找出在哪里绘制位图,以便您需要的 x,y 位于屏幕的中心,然后绘制您需要在所需坐标处填充空白区域的其他图块,具体取决于图块的移动方式居中

想象一个比实际屏幕更大的虚拟屏幕,周围都是相同大小的瓷砖

1 2 3

4×5

6 7 8

假设 X 是显示的大小,代表当前的瓦片,你需要弄清楚移动瓦片的方式,以及你需要填写哪些其他瓦片 1、2、3、4、5、6、7 或 8搬家造成的空地

如果您必须从 0,0 绘制图块 +x,则需要一些图块 4,从 0,0 绘制 +y 表示 2 中的一些,并且都表示 1,2,4 都需要,依此类推,所以找出组合并加载您需要的瓷砖,并找出每个瓷砖的绘图位置。这将为您提供显示中心的新虚拟图块。

这与我认为在客户端使用位图绘制方法一样有效。

更新

由于您的评论表明您只有一个非常大的图像,如果您需要的 x,y 比显示器尺寸更靠近边缘,这将是一个问题

尽管如此,您仍然可以在需要的地方绘制图像,只需测量屏幕并以目标 x,y 为中心绘制位图

所以如果屏幕是 500x500 并且你的图像是 5000x5000 并且中心在位置 x=1000 y=1000 那么

drawBitmap(Bitmap bitmap, Rect src, RectF dst, Paint paint)

其中源矩形为 1000-250,1000-250,500,500,dst 矩形为 0,0,500,500

250 是显示的中心 x 和中心 y,1000 是目标 x/y 坐标,500 是显示的大小。

同样,对于位于边缘的目标,您的屏幕中将有一个空白多边形,因为您没有无限的地图图块

或者,您可以使用 layoutparams 超大您的框架布局,只需将画布转换为 x 和 y 以使画布居中到 x,y 您需要使用类似的计算,这可能更高效,不太确定

请记住,如果您的图像非常大,您将使用大量内存

于 2011-07-13T14:27:43.357 回答