Android-将焦点放在我在onDraw方法中绘制的圆上

Android-将焦点放在我在onDraw方法中绘制的圆上,android,view,canvas,imageview,ondraw,Android,View,Canvas,Imageview,Ondraw,安卓问题。 我制作了一个定制的ImageView类,其中有一个onDraw方法,可以在特定像素上画一个圆(使用画布)。当我使用此自定义图像视图并打开我的图像时,我希望将焦点设置在我所绘制的圆上(例如,像google maps对您当前位置所做的那样。焦点设置为您当前的点)google上的地图服务器所做的是提供一组自定义的平铺,以便正确显示中心,较新的版本当然是基于向量的,所以他们只需绘制视图,使其位于他们想要的中心位置 在不知道应用程序的详细信息的情况下,您可能需要 创建自己的容器类,可能是Fra

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

google上的地图服务器所做的是提供一组自定义的平铺,以便正确显示中心,较新的版本当然是基于向量的,所以他们只需绘制视图,使其位于他们想要的中心位置

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

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

public class myMapFrameLayout extends FrameLayout {
覆盖onDraw或onDispatchDraw,以便您可以适当地布局平铺

找出绘制你的位图的地方,以便你需要的X,Y将在屏幕的中心,然后画出你需要在需要的坐标中填空的其他瓦片,这取决于瓦片被移动的方式,以得到中心的

。 想象一个虚拟屏幕,它比实际屏幕大,周围有大小相同的瓷砖

1 2 3

4 X 5

678

假设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=1000y=1000的位置,那么

drawBitmap(Bitmap bitmap, Rect src, RectF dst, Paint paint)
其中,源矩形为1000-2501000-250500500,dst矩形为0,0500500

250是显示器的中心x和中心y,1000是目标x/y坐标,500是显示器的尺寸

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

或者,您可以使用layoutparams增大framelayout的尺寸,只需在x和y方向平移画布,以使画布居中于x,y方向。您需要使用类似的计算器,这可能会更有效,但不是很确定


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

您是否想要焦点的视觉表示,实际将焦点设置为您的ImageView(除非您处理它,否则它不会产生任何视觉效果)或?正在显示IVIEVIEW,但我希望我的圆位于屏幕中间(因此具有焦点)。因为我的图像很大,并且离开了屏幕(它有上下左右平移的滚动条),所以给它“焦点”不会为你重新定位图像,仍然不确定你在这里想要什么。听起来,无论图像当前被平移到(平移)何处,您都希望在显示中保持圆居中。是否正确?图像是地图平铺。我正在绘制与当前gps坐标相关的圆。因此,当你打开这个图像视图时,你会在地图图像上看到一个圆圈,显示你所在的位置。然而,这个圆圈可能在屏幕左上角的某个地方(请记住,图像很大,会离开屏幕)。所以我想把焦点放在代表你现在所在的圆圈上……是的,我理解,但你还没有告诉我你希望“焦点”做什么。是否希望地图平铺重新定位,是否希望圆与正在绘制的其他圆在视觉上有所不同?或者您实际上是在尝试将焦点设置为imageview,以便您可以在侦听器中处理它?谢谢你的回复。在我的示例中,我只有一个图像(这意味着它是一个贴图块)。这1个图像/磁贴大于屏幕大小。所以现在我必须左右上下滚动才能找到我的定位点。如果x,y在左上角,这对你来说不太合适。你能做的唯一一件事就是把我想的图像放大,修改上面的答案谢谢你的建议。我会努力解决这个问题,或者想出新的解决办法