Java 是否可以使用setOnMarkerClickListener对for循环中创建的各种标记产生不同的结果?
我正在创建一个android应用程序,在地图上使用标记显示相机拍摄的所有照片。单击其中一个标记时,我希望图像在谷歌照片/图库应用程序中打开 下面是我添加标记的函数:Java 是否可以使用setOnMarkerClickListener对for循环中创建的各种标记产生不同的结果?,java,android,image,android-intent,Java,Android,Image,Android Intent,我正在创建一个android应用程序,在地图上使用标记显示相机拍摄的所有照片。单击其中一个标记时,我希望图像在谷歌照片/图库应用程序中打开 下面是我添加标记的函数: public void showMarkers(){ //getCameraImages gets all filepaths for images taken by camera List imagePaths = getCameraImages(this); // Gives the LatLng va
public void showMarkers(){
//getCameraImages gets all filepaths for images taken by camera
List imagePaths = getCameraImages(this);
// Gives the LatLng values converted from exif data
List realLatLngs = getLatLong(imagePaths);
for(int i = 0; i<realLatLngs.size(); i++){
String stringLatlng = (String) realLatLngs.get(i);
String[] latandlong = stringLatlng.split(",");
double latitude = Double.parseDouble(latandlong[0]);
double longitude = Double.parseDouble(latandlong[1]);
LatLng imageLocation = new LatLng(latitude,longitude);
String imagePath = (String) imagePaths.get(i);
String imageName = imagePath.replace("/storage/emulated/0/DCIM/Camera/", "");
Bitmap icon = decodeSampledBitmapFromFile(imagePath, 100, 100);
MarkerOptions options = new MarkerOptions()
.position(imageLocation)
.title(imageName)
.icon(BitmapDescriptorFactory.fromBitmap(icon));
mMap.addMarker(options);
}
}
是的,您可以通过标签来实现这一点 解决方案:
String imageName = imagePath.replace("/storage/emulated/0/DCIM/Camera/", "");
MarkerOptions options = new MarkerOptions()
.position(imageLocation)
.title(imageName)
.icon(BitmapDescriptorFactory.fromBitmap(icon));
Marker marker= mMap.addMarker(options);
//set your image path as tag of marger
marker.setTag(imageName);
//map marker click listener
googleMap.setOnMarkerClickListener(marker -> {
if (marker.getTag() != null) {
String imagePath = (String) marker.getTag();
Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.parse(imagePath), "image/*");
startActivity(intent);
}
return false;
});
我在setTag上得到错误“无法解析方法”setTag(java.lang.String)”,并且“变量”imagePath已在字符串imagePath=(String)marker.getTag()行的作用域中定义;我已经修复了这些错误,但是Android StudiocompileOptions{sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8}中不允许使用lambda表达式。将此添加到渐变lambda将启用渐变同步,并出现以下错误:“错误:(21,0)找不到方法编译器()对于参数[buildbspb982vahaapx57m5u1s31xb$\u run_closure1@53fa1a37]在org.gradle.api.project类型的根项目“MemoryMap2”上。“您想让我发布我的gradle以便您可以检查它吗?让我们。
String imageName = imagePath.replace("/storage/emulated/0/DCIM/Camera/", "");
MarkerOptions options = new MarkerOptions()
.position(imageLocation)
.title(imageName)
.icon(BitmapDescriptorFactory.fromBitmap(icon));
Marker marker= mMap.addMarker(options);
//set your image path as tag of marger
marker.setTag(imageName);
//map marker click listener
googleMap.setOnMarkerClickListener(marker -> {
if (marker.getTag() != null) {
String imagePath = (String) marker.getTag();
Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.parse(imagePath), "image/*");
startActivity(intent);
}
return false;
});