Я пытаюсь внедрить пользовательский маркер карты, используя свой макет XML, в Google Maps.
Однако;когда я использую метод createCustomMarker
для распечатки своего пользовательского маркера в Google Maps, он не загружает / не показывает изображение, поступающее из облака / сервера.
Я думаю, это потому, что Glide (или приложение в этом вопросе) не получил изменения для завершения загрузки и рендеринга изображения до того, как макет был преобразован в Bitmap, или, может быть, моя реализация просто неверна.Кто-нибудь может мне с этим помочь?
@SuppressLint("InflateParams")
private fun createCustomMarker(urlImageFromCloud: String): Bitmap{
val marker: LayoutInflater = getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater
val view: View = marker.inflate(R.layout.map_marker, null)
val messageIcon: Int = resources.getIdentifier("local_image_from_drawable", "drawable", this.packageName)
val markerPhoto: CircleImageView = view.findViewById(R.id.map_photo)
val markerContainer: CircleImageView = view.findViewById(R.id.map_photo)
val options: RequestOptions = RequestOptions()
.centerCrop()
.placeholder(R.color.colorGrayWhite)
.error(R.color.colorGrayWhite)
.diskCacheStrategy(DiskCacheStrategy.ALL)
Glide.with(this)
.load(urlImageFromCloud) // String image URL from my server/cloud - this is the part that does not show up.
.apply(options).into(markerPhoto)
Glide.with(this)
.load(messageIcon)
.apply(options).into(markerContainer)
val displayMetrics = DisplayMetrics()
windowManager.defaultDisplay.getMetrics(displayMetrics)
view.layoutParams = ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT)
view.measure(displayMetrics.widthPixels, displayMetrics.heightPixels)
view.layout(0, 0, displayMetrics.widthPixels, displayMetrics.heightPixels)
view.buildDrawingCache()
val bitmap = Bitmap.createBitmap(view.measuredWidth, view.measuredHeight, Bitmap.Config.ARGB_8888)
val canvas = Canvas(bitmap)
view.draw(canvas)
return bitmap
}
Мой map_marker XML:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/custom_marker_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/map_container"
android:layout_width="75dp"
android:layout_height="75dp"/>
<de.hdodenhof.circleimageview.CircleImageView
android:id="@+id/map_photo"
android:src="@color/colorGray"
android:layout_marginTop="5dp"
android:layout_centerHorizontal="true"
style="@style/MapMarkerCircleImage"/>
</RelativeLayout>
Вот как я назвал мой createCustomMarker
метод.
val defaultLocation = LatLng(locationLatitude, locationLongitude)
googleMap.addMarker(MarkerOptions().position(defaultLocation).icon(BitmapDescriptorFactory.fromBitmap(createCustomMarker("my_image_url_from_cloud"))))