好的,这个问题我已经面临几天了,似乎无法解决。
这是我的地图的工作方式:
- 点击地图上的任意点
- 通过相机意图拍照
- 将照片作为标记(缩略图(返回到点击的特定点。
(以上所有工作正常(
这就是我卡住的地方:
点击标记(图像(,它应该显示标记的较大图像,因为标记缩略图非常小。 问题是它显示的是拍摄的最新图像,而不是与该标记相关的图像。 所以我的问题是如何设置标记 ID,以便在用户点击该标记以显示完整图像时。 我之前在SO上问过这个问题,但不得不更改我的代码,以便将图像保存在设备上的文件夹中。 还有一个单独的类来创建缩略图。(但是我认为这对添加标记ID没有任何影响(
这是在为标记显示正确图像之前有效的代码。 (这仅显示拍摄的最新图像(:
相机意图
Intent getCameraImage = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
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"));
getCameraImage.putExtra(MediaStore.EXTRA_OUTPUT, fileUri);
startActivityForResult(getCameraImage, TAKE_PICTURE);
活动结果
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();
}
{
MarkerOptions markerOptions = new MarkerOptions()
.draggable(true)
.snippet("Tap here to remove marker")
.title("My Marker")
.position(pointtap)
.icon(BitmapDescriptorFactory
.fromBitmap(bitmap));
googleMap.addMarker(markerOptions);
}
}
}
在标记点击
@Override
public boolean onMarkerClick(Marker marker) {
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(
context);
// set title
alertDialogBuilder.setTitle("My Marker");
// set dialog message
alertDialogBuilder
.setMessage("Select Option")
.setCancelable(false)
.setPositiveButton("Display full Image",new DialogInterface.OnClickListener() {
public void onClick(DialogInterface arg0, int arg1) {
Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
Uri imgUri = Uri.parse("file://" + fileUri);
intent.setDataAndType(imgUri, "image/*");
startActivity(intent);
}
})
.setNegativeButton("Delete Marker",new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,int id) {
// if this button is clicked, just close
marker.remove();
}
});
// create alert dialog
AlertDialog alertDialog = alertDialogBuilder.create();
// show it
alertDialog.show();
return false;
我希望有人能好心地向我展示如何实现标记 ID,以便在用户点击标记时全屏显示为该标记拍摄的图像。
谢谢大家!
更新必须实现 AlertDialog 来显示两个选项,一个用于删除标记,一个用于显示完整图像,显示完整图像是我正在努力在地图上显示该点拍摄的图像的选项。
如果您没有使用标记 InfoWindow,您可以将 InfoWindows 标题或代码段设置为您的 id,然后检索它。我这样做
myMap.addMarker(new MarkerOptions()
.title(myTitle)
.snippet(mySnippet)
.position(myPosition));
然后要检索 id,只需使用:
myMarker.getTitle()
或
myMarker.getSnippet()
下面是使用代码段作为标记标记的示例:
public class CustomInfoWindow implements InfoWindowAdapter {
@Override
public View getInfoContents(Marker marker) {
View v = LayoutInflater.from(AppCtxProv.getContext()).inflate(R.layout.custom_info_window, null);
TextView title = (TextView) v.findViewById(R.id.title);
title.setText(marker.getTitle());
return v;
}
@Override
public View getInfoWindow(Marker marker) {
return null;
}
}
然后对于自定义布局,我使用了以下简单代码:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@color/white" >
<TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</RelativeLayout>
AppCtxProv 是我创建的一个活动类,它只返回上下文:
public class AppCtxProv extends Application {
@Override
public void onCreate() {
super.onCreate();
}
public static Context getContext() {
return getApplicationContext();
}
}
并在清单中给出
android:name="your.package.AppCtxProv"
属性到应用程序标记
试试这个。
(参考如何从谷歌地图v2中删除标记?
以前我确实告诉过你..只需将标记保存到您自己的变量中即可。并且每个标记都有一个索引号。因此,索引号由您提供和谷歌标记本身有ID...谷歌标记返回带有"m1,m2或m3..."的ID。所以只需替换 get marker.getId 并替换 'm'..现在,您可以标记此ID与您的索引号匹配。
获取标记 ID 的示例代码
String mId = marker.getId();
mId = mId.replace("m","");
String clickMarker = Integer.valueOf(mId);
因此,'i' 是 Google-Marker Id...,并且您的标记索引值与它匹配。获取点击标记 ID 的示例代码
for(int k = 0; k<myMarkersHash.size(); k++)
{
if(clickMarker == myMarkersHash.get(k))
{
// now got k is marker value
break;
}
}
myMarkersHash 也定义在 ref. link