Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/scheme/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 地图视图坐标错误_Android_Google Maps_Android Mapview_Mapactivity - Fatal编程技术网

Android 地图视图坐标错误

Android 地图视图坐标错误,android,google-maps,android-mapview,mapactivity,Android,Google Maps,Android Mapview,Mapactivity,当我在Android 2.2手机上使用ItemizeOverlay在MapView中放置PIN时,位置是正确的,但当我在4.0和4.1手机上放置PIN时,位置是错误的。大头针放置在地图的更下方,但具有相同的x坐标 我发现4.XX设备上MapView左上角的像素值与我的2.2设备上的像素值不同(0.0)。我可以看出不同之处在于动作条的高度(如图中突出显示的那个),并找到了一些代码来获取它的高度。现在,在放置管脚时,我从MapView中的y坐标中减去动作栏的高度。我在4.XX设备上得到了正确的结果,

当我在Android 2.2手机上使用ItemizeOverlay在MapView中放置PIN时,位置是正确的,但当我在4.0和4.1手机上放置PIN时,位置是错误的。大头针放置在地图的更下方,但具有相同的x坐标

我发现4.XX设备上MapView左上角的像素值与我的2.2设备上的像素值不同(0.0)。我可以看出不同之处在于动作条的高度(如图中突出显示的那个),并找到了一些代码来获取它的高度。现在,在放置管脚时,我从MapView中的y坐标中减去动作栏的高度。我在4.XX设备上得到了正确的结果,但现在在2.2设备上的位置是错误的

我的屏幕顶部有一个插件,但它的高度在我所有的设备上几乎都是一样的

你知道我应该怎么做才能在所有设备的MapView中获得正确的坐标吗

我使用的代码是:


不太清楚您在这里要做什么,但是如果您试图在地图上放置图钉,那么您应该使用,这需要地图的lat/lon坐标,而不是屏幕坐标


这里有一个用法示例。这段代码显示了如何在地图上获取图钉,如何移动图钉,以及如何在屏幕像素和地图纬度/经度之间转换,所有这些都在大约200行中。

我解决了这个问题,但这不是最漂亮的解决方案

我检查动作栏的大小。如果它存在,我运行问题中显示的代码。如果大小返回null,这意味着操作栏不存在,则我不运行代码

代码是:

// Check if an action bar exist (Android 4.XX) 
private void getActionBarHeight() {
    // TODO Auto-generated method stub
    final WindowManager w = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
    final Display d = w.getDefaultDisplay();
    final DisplayMetrics m = new DisplayMetrics();
    d.getMetrics(m);
    actionBarHeight = m.heightPixels;

    try { // If the action bar exist
        TypedValue tv = new TypedValue();
        context.getTheme().resolveAttribute(android.R.attr.actionBarSize, tv, true);
        getResources().getDimensionPixelSize(tv.resourceId);
    } catch (Exception e) { // If it doesn't exist
        actionBarHeight = -1;
    }
}
// Check if an action bar exist (Android 4.XX) 
private void getActionBarHeight() {
    // TODO Auto-generated method stub
    final WindowManager w = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
    final Display d = w.getDefaultDisplay();
    final DisplayMetrics m = new DisplayMetrics();
    d.getMetrics(m);
    actionBarHeight = m.heightPixels;

    try { // If the action bar exist
        TypedValue tv = new TypedValue();
        context.getTheme().resolveAttribute(android.R.attr.actionBarSize, tv, true);
        getResources().getDimensionPixelSize(tv.resourceId);
    } catch (Exception e) { // If it doesn't exist
        actionBarHeight = -1;
    }
}