2014-12-07 45 views
0

我忙于开发一个应用程序,用户点击地图上的位置,然后相机意图启动,然后可以拍摄图像并返回到地图那一点。但问题似乎是,当有几个标记时,点击查看大图时会显示相同的图像。所以我需要做的是将该图像保存到该点(标记),以便当用户点击标记以查看大图时,应该显示该图像而不是由相机意图拍摄的最新图像。如何从谷歌地图中的自定义标记中调用图像地图api v2

所以我迄今所做的是:

这是我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); 

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

所以它不将图像保存到拍了拍地图上的特定点(或“纽带”,以该标记的图像)

任何人都可以请帮助我吗? 在此先感谢!

回答

0

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

onInfoWindowClick()中,您传递的是fileURI,这可能不是指正确的图像。注意,只要调用MapLongClick(),您总是覆盖fileURI。这就是为什么你只能得到最新的图像。

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