Android-获取动态绘制位图的X和Y坐标

Android-获取动态绘制位图的X和Y坐标,android,bitmap,osmdroid,android-bitmap,Android,Bitmap,Osmdroid,Android Bitmap,我正在用OpenStreetMaps(使用osmdroid)制作一个Android应用程序。 在这张地图上,会显示标记(long/lat和这些标记的其他数据是从json文件中检索的)。这些标记是重叠的项目,并且都正确显示在地图视图上。这些位图的X和Y坐标是通过获取地图视图的投影来计算的,然后从地质点的X和Y坐标,结合位图的宽度/2和高度/2,在世界地图上的正确位置绘制位图 长话短说:位图的X和Y值是动态计算的。 我的问题是,我正在编写当用户在标记位图上单击(=进行触摸事件)时应该发生的代码。为此

我正在用OpenStreetMaps(使用osmdroid)制作一个Android应用程序。 在这张地图上,会显示标记(long/lat和这些标记的其他数据是从json文件中检索的)。这些标记是重叠的项目,并且都正确显示在地图视图上。这些位图的X和Y坐标是通过获取地图视图的投影来计算的,然后从地质点的X和Y坐标,结合位图的宽度/2和高度/2,在世界地图上的正确位置绘制位图

长话短说:位图的X和Y值是动态计算的。 我的问题是,我正在编写当用户在标记位图上单击(=进行触摸事件)时应该发生的代码。为此,我需要检查事件的X和Y是否在位图的范围内。 我该怎么做

不幸的是,似乎没有一个简单的bitmap.getX或.getY,这正是我所需要的

这是绘制位图的代码(发生在@Override draw()中),如果它有任何用途:

for(OverlayItem p: waypointMarkers){
                IGeoPoint in = p.getPoint();
                Point out = new Point();
                mapview.getProjection().toPixels(in, out);

                Bitmap bm = BitmapFactory.decodeResource(getResources(),
                        R.drawable.marker);

                bitmaps.put(bm, p);

                canvas.drawBitmap(bm,
                        out.x - bm.getWidth()/2,    //shift the bitmap center
                        out.y - bm.getHeight()/2,   //shift the bitmap center
                        null);

            }
bitmap.put(bm,p)是一个带有位图、叠加项对的哈希映射。在我的代码后面,我将循环遍历这个HashMap的键,在这里我要检查位图的X和Y

for(Bitmap b: bitmaps.keySet()){
            if (x >= xOfBitmap && x < (xOfBitmap + yourBitmap.getWidth())
                    && y >= yOfBitmap && y < (yOfBitmap + yourBitmap.getHeight())) {
                //found this on StackOverflow, if this is true than user has clicked somewhere on the bitmap
            }
for(位图b:bitmaps.keySet()){
如果(x>=xOfBitmap&&x<(xOfBitmap+yourBitmap.getWidth())
&&y>=yOfBitmap&&y<(yOfBitmap+yourBitmap.getHeight()){
//在StackOverflow上找到此项,如果这是真的,则用户已单击位图上的某个位置
}
提前谢谢。

你可以看看

当它实现触摸事件检测时,查看其源代码(hitTest方法)将为您提供一个工作示例


如果它符合您的需要,您可以直接使用它。

一个带有位图的HashMap,OverlayItem对。
。难道您不能像以前一样从OverlayItem中再次计算x,y吗?不幸的是,OverlayItem当前没有与位图的链接。OverlayItem只包含带有名称等的字符串值和g的地理点lobal location。我目前正在尝试使用一个包含int X、int Y和位图的类,该类是在绘制位图之前创建的,因此这些对象应该包含X和Y。但是目前还没有运气,我认为它与int/float转换有关(在世界地图上,逗号后的一个数字立即变成了另一个位置)对不起,我不明白你为什么不能再次计算x,y。如果不能,那么就使用位图。put(bm,p,out.x,out.y)之类的东西;顺便问一下,你为什么需要int/float转换?