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

时间:2015-02-17 10:48:35

标签: android bitmap osmdroid android-bitmap

我正在使用OpenStreetMaps创建一个Android应用程序(使用osmdroid)。 在此地图上,显示标记(从json文件中检索这些标记的长/纬度和其他数据)。这些标记是OverlayItems,并且都在MapView上正确显示。这些位图的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);

            }

bitmaps.put(bm, p);是一个带有Bitmap,OverlayItem对的HashMap。稍后在我的代码中,我循环遍历此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
            }

提前致谢。

1 个答案:

答案 0 :(得分:0)

您可以查看OSMBonusPack Marker

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

也许你可以使用它,如果它符合你的需要。