Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 是否可以使用setOnMarkerClickListener对for循环中创建的各种标记产生不同的结果?_Java_Android_Image_Android Intent - Fatal编程技术网

Java 是否可以使用setOnMarkerClickListener对for循环中创建的各种标记产生不同的结果?

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

我正在创建一个android应用程序,在地图上使用标记显示相机拍摄的所有照片。单击其中一个标记时,我希望图像在谷歌照片/图库应用程序中打开

下面是我添加标记的函数:

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;
    });