Android-获取动态绘制位图的X和Y坐标
我正在用OpenStreetMaps(使用osmdroid)制作一个Android应用程序。 在这张地图上,会显示标记(long/lat和这些标记的其他数据是从json文件中检索的)。这些标记是重叠的项目,并且都正确显示在地图视图上。这些位图的X和Y坐标是通过获取地图视图的投影来计算的,然后从地质点的X和Y坐标,结合位图的宽度/2和高度/2,在世界地图上的正确位置绘制位图 长话短说:位图的X和Y值是动态计算的。 我的问题是,我正在编写当用户在标记位图上单击(=进行触摸事件)时应该发生的代码。为此,我需要检查事件的X和Y是否在位图的范围内。 我该怎么做 不幸的是,似乎没有一个简单的bitmap.getX或.getY,这正是我所需要的 这是绘制位图的代码(发生在@Override draw()中),如果它有任何用途: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值是动态计算的。 我的问题是,我正在编写当用户在标记位图上单击(=进行触摸事件)时应该发生的代码。为此
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转换?