我正在忙着开发一个应用程序,用户可以点击地图上的位置然后开始摄像头意图,然后可以拍摄图像并在此时返回到地图。但问题似乎是当有几个标记时,点击以查看大图像时会显示相同的图像。所以我需要做的是将该图像保存到该点(标记),这样当用户点击标记以查看大图时,应显示该图像,而不是相机意图拍摄的最新图像。
所以我到目前为止所做的是:
这是我的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 :(得分:0)
putParcelable(EXTRA_IMAGE, fileUri)
会将fileUri保存在捆绑包中,并可使用EXTRA_IMAGE
密钥进行检索。如果您有多个图像,则必须将URI保存在捆绑中,但是使用不同的密钥(不是EXTRA_IMAGE,因为第一个图像已经使用了该密钥)。
在onInfoWindowClick()
中,您正在传递fileURI
,这可能与正确的图片无关。请注意,每当调用onMapLongClick()时,您始终会覆盖fileURI
。这就是为什么你只得到最新的图像。
以下是我的建议:创建一个Map对象,将每个Marker
对象(键)映射到Uri
对象(值)。这样,在onInfoWindowClick()
中,您可以检索要放入Uri
的正确intent.setDataAndType()
对象。