为什么 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;
}
这是结果的示例图片
Picasso
或 Glid
异步加载图像。在您从视图创建位图时,ImageView
只有占位符(Picasso
或 Glid
尚未下载图像并将其设置为 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) {
}
});
我正在尝试将图像从我制作的自定义标记布局加载到我的 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;
}
这是结果的示例图片
Picasso
或 Glid
异步加载图像。在您从视图创建位图时,ImageView
只有占位符(Picasso
或 Glid
尚未下载图像并将其设置为 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) {
}
});