为什么 glide 和 picasso 不会在 Google 地图标记中加载 url 图像?

Why does the glide and picasso won't load the url image in Google Maps Marker?

我正在尝试将图像从我制作的自定义标记布局加载到我的 CircleImageView。我尝试使用 glide 或 picasso,但它们都不起作用,它只显示标记的占位符图像。有人可以帮我解决这个问题吗?我被困了大约 4 个小时,但仍然没有找到造成这种情况的原因。

place2 = new MarkerOptions()
         .position(storeLatLng)
         .icon(BitmapDescriptorFactory.fromBitmap(createCustomMarker(CheckOutActivity.this , storeIMG, storeName))).title(storeClass);


...

private static Bitmap createCustomMarker(Context context, final String resource, String name) {

        View marker = ((LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE)).inflate(R.layout.bitmap_google_marker_layout_item, null);
        de.hdodenhof.circleimageview.CircleImageView image = (de.hdodenhof.circleimageview.CircleImageView) marker.findViewById(R.id.user_dp);
        TextView txt_name = (TextView) marker.findViewById(R.id.name);
        txt_name.setText(name);
        
        //Glide.with(marker).load(resource).apply(new RequestOptions().placeholder(R.mipmap.loader)).into(image);
        Picasso.get()
                .load(resource)
                .placeholder(R.mipmap.loader)
                .error(R.drawable.error)
                .into(image);

        DisplayMetrics displayMetrics = new DisplayMetrics();
        ((Activity) context).getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
        marker.setLayoutParams(new ViewGroup.LayoutParams(52, ViewGroup.LayoutParams.WRAP_CONTENT));
        marker.measure(displayMetrics.widthPixels, displayMetrics.heightPixels);
        marker.layout(0, 0, displayMetrics.widthPixels, displayMetrics.heightPixels);
        marker.buildDrawingCache();
        Bitmap bitmap = Bitmap.createBitmap(marker.getMeasuredWidth(), marker.getMeasuredHeight(), Bitmap.Config.ARGB_8888);
        Canvas canvas = new Canvas(bitmap);
        marker.draw(canvas);
        return bitmap;
    }

这是结果的示例图片

PicassoGlid 异步加载图像。在您从视图创建位图时,ImageView 只有占位符(PicassoGlid 尚未下载图像并将其设置为 ImageView)。所以你可以在标记中看到占位符。一旦您创建了 Bitmap 表单视图,View 之后的任何更改都不会影响位图。

要使用实际图像制作标记,您必须在 Picasso 下载后再次更新或重新创建标记,并在 ImageView 中设置图像。

我认为最好用占位符制作 Marker 并在下载图像后更新 Marker

您可以使用 Picasso 下载器 -

Picasso.get().load(uri)
             .resize(50, 50)
             .into(new com.squareup.picasso.Target() {
                   @Override
                   public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
                                    //Use bitmap for Marker
                  }
                  @Override
                  public void onBitmapFailed(Exception e, Drawable errorDrawable) {
                  }

                  @Override
                  public void onPrepareLoad(Drawable placeHolderDrawable) {
                  }
             });