首页 > 解决方案 > 为什么 glide 和 picasso 不会在 Google Maps Marker 中加载 url 图片?

问题描述

我正在尝试从我制作的自定义标记布局将图像加载到我的 CircleImageView 中。我尝试使用滑翔或毕加索,但它们都不起作用,它只显示标记的占位符图像。有人可以帮我解决这个问题。我在这被困了大约 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;
    }

这是结果的示例图像

标记的图像

标签: androidpicassoandroid-glideandroid-bitmap

解决方案


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

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

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


推荐阅读