如何在Google Maps api v2中从自定义标记中调用图像

时间:2014-12-07 08:24:10

标签: android google-maps

我正在忙着开发一个应用程序,用户可以点击地图上的位置然后开始摄像头意图,然后可以拍摄图像并在此时返回到地图。但问题似乎是当有几个标记时,点击以查看大图像时会显示相同的图像。所以我需要做的是将该图像保存到该点(标记),这样当用户点击标记以查看大图时,应显示该图像,而不是相机意图拍摄的最新图像。

所以我到目前为止所做的是:

这是我的onMapLongClick

public void onMapLongClick(final LatLng point) {
      theLastImage=point;

      MarkerOptions markerOptions = new MarkerOptions()
     .draggable(true)
     .snippet("Tap here to see full image")
     .title("Image")
     .position(theLastImage);
     googleMap.addMarker(markerOptions);

      googleMap.setOnInfoWindowClickListener(new OnInfoWindowClickListener() {

          @Override
          public void onInfoWindowClick(Marker marker) {
              Intent intent = new Intent();
              intent.setAction(Intent.ACTION_VIEW);
              intent.getParcelableExtra(EXTRA_IMAGE);
              intent.setDataAndType(Uri.parse("file://" + bitmap + fileUri), "image/*");
                startActivity(intent);
            return;
          }
      });
     getApplicationContext().getDir(
              getResources().getString(R.string.app_name), MODE_PRIVATE);

          fileUri = Uri.fromFile(new File((Environment.getExternalStorageDirectory() +
                  "/" +getResources().getString(R.string.app_name)),new Date().getTime() + ".jpg"));
          Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
          takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri);
          startActivityForResult(takePictureIntent,TAKE_PICTURE);
  }

然后在ActivityForResult

public void onActivityResult(int requestCode, int resultCode, Intent data) {
          if (requestCode == TAKE_PICTURE && resultCode == RESULT_OK) {

                  try {
                      GetImageThumbnail getImageThumbnail = new GetImageThumbnail();
                      bitmap = getImageThumbnail.getThumbnail(fileUri, this);
                  } catch (FileNotFoundException e1) {
                      e1.printStackTrace();
                  } catch (IOException e1) {
                      e1.printStackTrace();
                  }
           }

然后将该图像保存到各个标记:

LatLng theLastImage;
private static final String EXTRA_IMAGE = "theLastImage";

@Override
    public void onSaveInstanceState(Bundle savedInstanceState) {
        super.onSaveInstanceState(savedInstanceState);
        savedInstanceState.putParcelable(EXTRA_IMAGE, fileUri);

@Override
    public void onRestoreInstanceState(Bundle savedInstanceState) {
        super.onRestoreInstanceState(savedInstanceState);
        theLastImage = (LatLng)savedInstanceState.getParcelable(EXTRA_IMAGE);

但这似乎不起作用,因为它只显示用户点击标记时显示的最新图像。

因此,不会将图像保存到地图上的特定点(或将图像“绑定”到该标记)

有人可以帮助我吗? 提前谢谢!

1 个答案:

答案 0 :(得分:0)

putParcelable(EXTRA_IMAGE, fileUri)会将fileUri保存在捆绑包中,并可使用EXTRA_IMAGE密钥进行检索。如果您有多个图像,则必须将URI保存在捆绑中,但是使用不同的密钥(不是EXTRA_IMAGE,因为第一个图像已经使用了该密钥)。

onInfoWindowClick()中,您正在传递fileURI,这可能与正确的图片无关。请注意,每当调用onMapLongClick()时,您始终会覆盖fileURI。这就是为什么你只得到最新的图像。

以下是我的建议:创建一个Map对象,将每个Marker对象(键)映射到Uri对象(值)。这样,在onInfoWindowClick()中,您可以检索要放入Uri的正确intent.setDataAndType()对象。