Android问题。 我已经创建了一个自定义的ImageView类,在其中我有一个onDraw方法,它将在特定像素上绘制一个圆(使用画布)。当我使用这个自定义图像视图并打开我的图像时,我想将焦点设置在我绘制的圆圈上(例如谷歌地图与您当前的位置相关。焦点设置为您当前的点)
答案 0 :(得分:0)
地图服务器在谷歌上做的是提供一组自定义的图块,以便正确显示中心,较新的版本当然是基于矢量的,因此他们只需绘制视图,使其位于他们想要的位置。
在不知道应用程序的详细信息的情况下,您可能需要
创建自己的容器类,可能是FrameLayout
public class myMapFrameLayout extends FrameLayout {
覆盖onDraw或onDispatchDraw,以便您可以适当地布局图块
找出绘制位图的位置,使得您需要的x,y位于屏幕的中心,然后绘制需要填充所需坐标处的空白区域的其他图块,具体取决于哪个方向瓷砖被移动到中心
想象一个大于实际屏幕的虚拟屏幕,周围的瓷砖大小相同
1 2 3
4 X 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超大你的framelayout,只需在x和y中翻译画布以使画布居中于x,你需要使用类似的计算,这可能更高效,不太确定
请记住,如果您的图片非常大,那么您将会使用大量内存