我将教程编码为在Google地图中搜索地址。 不幸的是,当我瞄准时,标记不会粘在那个地方。 似乎标记正在逐渐消失。
class MapOverlay extends com.google.android.maps.Overlay {
public boolean draw(Canvas canvas, MapView mapView,
boolean shadow, long when) {
super.draw(canvas, mapView, shadow);
// translate the GeoPoint to screen pixels
Point screenPts = new Point();
mapView.getProjection().toPixels(p, screenPts);
// add the red marker
Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.marker_red);
canvas.drawBitmap(bmp, screenPts.x, screenPts.y-32, null);
return true;
}
}
我认为它来自将GeoPoint转换为屏幕像素 以下是搜索按钮的onClick事件中的代码:
this.searchButton.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
// TODO Auto-generated method stub
followMe = false;
String temp = searchBar.getText().toString();
List<Address> addresses = null;
try {
addresses = geoCoder.getFromLocationName(temp,5);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if (addresses != null) {
p = new GeoPoint(
(int) (addresses.get(0).getLatitude() * 1E6),
(int) (addresses.get(0).getLongitude() * 1E6));
mapController.animateTo(p);
mapController.setZoom(19);
MapOverlay mapOverlay = new MapOverlay();
mapOverlays = mapView.getOverlays();
mapOverlays.add(mapOverlay);
mapView.postInvalidate();
//searchBar.setText("");
} else {
AlertDialog.Builder adb = new AlertDialog.Builder(
GMapsSubActivity.this);
adb.setTitle("Google Map");
adb.setMessage("Please Provide the Proper Place");
adb.setPositiveButton("Close", null);
adb.show();
}
}
});
搜索栏是一个editText,followMe不相关。 我想让标记贴在我缩小时所寻找的地方。
图片: http://i.imgur.com/iavqa.jpg http://i.imgur.com/dFqIs.jpg
答案 0 :(得分:0)
不知道我是否正确理解您的代码......但作为一般答案:在多个图块上展开位置时,您无法直接使用纬度和经度值。那是因为地球是一个球体(某种程度上),当你使用线性地图图块并使用相同的线性平移值放大/缩小时,你会得到一些不准确的信息。
中的GeoUtils类中“窃取”了一些有用的代码