Адаптер пользовательского информационного окна не загружает изображения в первый раз на карте GoogleAndroid

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Адаптер пользовательского информационного окна не загружает изображения в первый раз на карте Google

Сообщение Anonymous »

В моем приложении есть карта Google, и на карте показано несколько маркеров. При нажатии на маркеры отображается окно настраиваемой информации.
В окне настраиваемой информации у меня есть несколько изображений для отображения и одно представление переработчика. В этом представлении переработчика также отображаются изображения. CustomInfoWindowAdapter

Код: Выделить всё

class CustomInfoWindowAdapter(
private val activity: Activity,
private val mRegisteredVenuesDataHome: HomeResponseModel.RegisteredVenuesDataHome.VenuesHome?,
private val click: Click
) : GoogleMap.InfoWindowAdapter {

private lateinit var dialogRestaurantBinding: DialogRestaurantBinding

init {
initializeDialogBinding()
}

private fun initializeDialogBinding() {
dialogRestaurantBinding =
DialogRestaurantBinding.inflate(LayoutInflater.from(activity), null, false)

val gradientDrawable = ContextCompat.getDrawable(
activity,
R.drawable.white_info_window_background_with_no_border
) as GradientDrawable

val bitmap = drawableToBitmap(gradientDrawable, 240)

val roundedBitmap = getRoundedCornerBitmap(bitmap, 20)

dialogRestaurantBinding.rlInfoWindow.background =
BitmapDrawable(dialogRestaurantBinding.root.resources, roundedBitmap)

dialogRestaurantBinding.tvRestaurantName.text =
if (Utils.isNotNull(mRegisteredVenuesDataHome!!.name)) {
mRegisteredVenuesDataHome.name
} else {
""
}

Glide.with(activity)
.asBitmap()
.load(mRegisteredVenuesDataHome.image)
.placeholder(R.mipmap.ic_launcher)
.error(R.mipmap.ic_launcher)
.listener(object : RequestListener {

override fun onLoadFailed(
e: GlideException?,
model: Any?,
target: Target,
isFirstResource: Boolean
): Boolean {
return false
}

override fun onResourceReady(
resource: Bitmap,
model: Any,
target: Target?,
dataSource: DataSource,
isFirstResource: Boolean
): Boolean {
resource.let {
val roundedBitmapImage =
getRoundedCornerBitmap(it, 15)
dialogRestaurantBinding.ivRestaurant.setImageBitmap(roundedBitmapImage)
}
return true
}
})
.into(dialogRestaurantBinding.ivRestaurant)

if (mRegisteredVenuesDataHome.category?.image != null &&  Utils.isNotNull(
mRegisteredVenuesDataHome.category.image
)
) {
Glide.with(activity)
.load(mRegisteredVenuesDataHome.category.image)
.apply(
RequestOptions()
.diskCacheStrategy(DiskCacheStrategy.ALL)
.placeholder(R.mipmap.ic_launcher)
.error(R.mipmap.ic_launcher)
)
.into(dialogRestaurantBinding.ivRestaurantType)
} else {
dialogRestaurantBinding.ivRestaurantType.setImageDrawable(
ContextCompat.getDrawable(
activity, R.mipmap.ic_launcher
)
)
}

dialogRestaurantBinding.tvRestaurantType.text =
if (Utils.isNotNull(mRegisteredVenuesDataHome.category!!.name)) {
mRegisteredVenuesDataHome.category.name
} else {
""
}

dialogRestaurantBinding.tvRestaurantDescription.text =
if (Utils.isNotNull(mRegisteredVenuesDataHome.description)) {
mRegisteredVenuesDataHome.description
} else {
""
}

if (mRegisteredVenuesDataHome.checkVenueRegisteredOrNot != null) {
if (mRegisteredVenuesDataHome.checkVenueRegisteredOrNot == 1) {
dialogRestaurantBinding.cvRegisterInterest.setBackgroundResource(R.drawable.registered_background_with_no_border)
dialogRestaurantBinding.tvInterest.text =
activity.getString(R.string.registered_title)
dialogRestaurantBinding.tvInterest.setTextColor(
activity.getColor(R.color.color222222_constant)
)
} else {
dialogRestaurantBinding.cvRegisterInterest.setBackgroundResource(R.drawable.register_interest_background_with_no_border)
dialogRestaurantBinding.tvInterest.text =
activity.getString(R.string.register_interest)
dialogRestaurantBinding.tvInterest.setTextColor(
activity.getColor(R.color.white_constant)
)
}
}

if (mRegisteredVenuesDataHome.territiers!!.isNotEmpty()) {
dialogRestaurantBinding.rvInterestedTerritiers.visibility = View.VISIBLE
dialogRestaurantBinding.rvInterestedTerritiers.layoutManager =
LinearLayoutManager(activity, LinearLayoutManager.HORIZONTAL, false)
val interestedTerriTiersAdapter = InterestedTerritiersAdapter(
activity,
mRegisteredVenuesDataHome.territiers,
object : Click {
override fun onClick(position: Int, `object`: Any, value: String) {

}
}
)
dialogRestaurantBinding.rvInterestedTerritiers.adapter = interestedTerriTiersAdapter
} else {
dialogRestaurantBinding.rvInterestedTerritiers.visibility = View.GONE
}

if (mRegisteredVenuesDataHome.interestedTerritiers != null && Utils.isNotNull(
mRegisteredVenuesDataHome.interestedTerritiers
)
) {
dialogRestaurantBinding.tvInterestedTerritiersCount.visibility = View.VISIBLE
dialogRestaurantBinding.tvInterestedTerritiersCount.text =
mRegisteredVenuesDataHome.interestedTerritiers.toString()
} else {
dialogRestaurantBinding.tvInterestedTerritiersCount.visibility = View.GONE
}
}

override fun getInfoContents(p0: Marker): View {
return dialogRestaurantBinding.root
}

override fun getInfoWindow(p0: Marker): View {
if (!::dialogRestaurantBinding.isInitialized) {
initializeDialogBinding()

}

dialogRestaurantBinding.cvRegisterInterest.setOnClickListener {
click.onClick(2, " ", "  ")
}

return dialogRestaurantBinding.root

}

private fun getRoundedCornerBitmap(bitmap: Bitmap, pixels: Int): Bitmap {
val output = Bitmap.createBitmap(bitmap.width, bitmap.height, Bitmap.Config.ARGB_8888)
val canvas = Canvas(output)

val paint = Paint()
val rect = Rect(0, 0, bitmap.width, bitmap.height)
val rectF = RectF(rect)

val roundPx = pixels.toFloat()

paint.isAntiAlias = true
canvas.drawARGB(0, 0, 0, 0)
paint.color = Color.BLACK
canvas.drawRoundRect(rectF, roundPx, roundPx, paint)

paint.xfermode = PorterDuffXfermode(PorterDuff.Mode.SRC_IN)
canvas.drawBitmap(bitmap, rect, rect, paint)

return output
}

private fun drawableToBitmap(drawable: GradientDrawable, width: Int): Bitmap {
val intrinsicWidth = drawable.intrinsicWidth
val intrinsicHeight = drawable.intrinsicHeight
val height = (width.toFloat() / intrinsicWidth * intrinsicHeight).toInt()

val bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888)
val canvas = Canvas(bitmap)
drawable.setBounds(0, 0, canvas.width, canvas.height)
drawable.draw(canvas)
return bitmap
}
}
Проблема, с которой я столкнулся, заключается в том, что когда я впервые нажимаю на маркер, изображения внутри информационного окна не загружаются, а также изображения внутри представления переработчика, которые снова внутри информационного окна также не загружаются.
Проблема, с которой я столкнулся, заключается в том, что когда я впервые нажимаю на маркер, изображения внутри информационного окна не загружаются.
Проблема, с которой я столкнулся, заключается в том, что когда я впервые нажимаю на маркер, изображения внутри информационного окна не загружаются, а также изображения внутри представления переработчика, которые снова внутри информационного окна также не загружаются.
p>
Когда я снова нажимаю на маркер, изображения загружаются идеально.
Я хочу загрузить все изображения при первом щелчке по маркеру.< /p>

Код: Выделить всё

mMap!!.setOnMapLoadedCallback {
if (mRegisteredVenuesHomeList!!.isNotEmpty()) {
mRegisteredVenuesHomeList?.forEach { data ->
if (!data.venueSorting.isNullOrEmpty()) {
data.venueSorting.forEach { venueSorting ->
if (venueSorting.name != null && Utils.isNotNull(venueSorting.name) && venueSorting.name.toString()
.equals("popular", true)
) {
val marker =
if (venueSorting.count != null && venueSorting.count > 0) {
addCustomMarker(3, data, venueSorting.count, true)
} else {
addCustomMarker(3, data)
}
val markerData = MarkerData(marker, data)
markerDataList.add(markerData)
}

if (venueSorting.name != null && Utils.isNotNull(venueSorting.name) && venueSorting.name.toString()
.equals("venue_on_spotlight", true)
) {
val marker =
if (venueSorting.count != null && venueSorting.count > 0) {
addCustomMarker(1, data, venueSorting.count, true)
} else {
addCustomMarker(1, data)
}
val markerData = MarkerData(marker, data)
markerDataList.add(markerData)
}

if (venueSorting.name != null && Utils.isNotNull(venueSorting.name) && venueSorting.name.toString()
.equals("discountoffer", true)
) {
val marker =
if (venueSorting.count != null && venueSorting.count >  0) {
addCustomMarker(2, data, venueSorting.count, true)
} else {
addCustomMarker(2, data)
}
val markerData = MarkerData(marker, data)
markerDataList.add(markerData)
}
}
} else {
val marker = addCustomMarker(0, data)
val markerData = MarkerData(marker, data)
markerDataList.add(markerData)
}
}
}
mMap!!.setInfoWindowAdapter(object : GoogleMap.InfoWindowAdapter {
override fun getInfoContents(marker: Marker): View? {
return null
}

override fun getInfoWindow(marker: Marker): View {
val markerData = markerDataList.find { it.marker == marker }
markerData?.let { markerDataUpdate ->
mInterestedTerritiersList!!.clear()
if (markerDataUpdate.data.territiers != null) {
mInterestedTerritiersList!!.addAll(
markerDataUpdate.data.territiers.take(
5
)
)
}
preloadImages()
if (mInterestedTerritiersList != null) {
preloadTerritiersImages(mInterestedTerritiersList!!)
}
return CustomInfoWindowAdapter(
requireActivity(),
markerDataUpdate.data,
object : Click {
override fun onClick(position: Int, `object`: Any, value: String) {
when (position) {
1 -> {
Utils.showLog(
this@MapFragment.javaClass.simpleName, "1"
)
}

2 -> {
Utils.showLog(
this@MapFragment.javaClass.simpleName, "2"
)
}
}
}
}).getInfoWindow(marker)
}
return View(requireContext())
}
})

mMap!!.setOnMarkerClickListener { clickedMarker ->
val markerPosition = clickedMarker.position
val point = mMap!!.projection.toScreenLocation(markerPosition)
val offset = 300
point.y -= offset
val offsetPosition = mMap!!.projection.fromScreenLocation(point)
mMap!!.animateCamera(CameraUpdateFactory.newLatLng(offsetPosition))
clickedMarker.showInfoWindow()
true
}
mMap!!.setOnInfoWindowClickListener { clickedMarker ->
val markerData = markerDataList.find { it.marker == clickedMarker }
markerData?.let { markerDataUpdate ->
val intent = Intent(requireContext(), RestaurantDetailsActivity::class.java)
intent.putExtra(Constant.RESTAURANT_DETAIL, markerDataUpdate.data)
activityLauncher.launch(intent,
object : BetterActivityResult.OnActivityResult  {
override fun onActivityResult(result: ActivityResult) {
if (result.resultCode == 101) {
mMap?.let { _ ->
openedInfoWindow?.let { marker ->
marker.showInfoWindow()
openedInfoWindow = null
}
currentLocationMarkerOptions?.let { options ->
mMap!!.addMarker(options)
}
venuesAndOffers()
}
}
}

})
AnimUtils.enterAnimation(requireActivity())
}
}
}

private fun preloadImages() {
for (venue in mRegisteredVenuesHomeList!!) {
venue.image?.let { imageUrl ->
Glide.with(requireActivity()).load(imageUrl).preload()
}
}
}

private fun preloadTerritiersImages(territiersHome: List) {
for (territier in territiersHome) {
// Assuming each territier has an image URL
territier.profileImage!!.name?.let { imageUrl ->
Glide.with(requireActivity()).load(imageUrl).preload()
}
}
}
Пожалуйста, помогите мне с этим.

Подробнее здесь: https://stackoverflow.com/questions/790 ... google-map
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Bs4-подход к странице википедии: получение информационного окна
    Anonymous » » в форуме Python
    0 Ответы
    17 Просмотры
    Последнее сообщение Anonymous
  • Исправьте положение информационного окна относительно узла sigma.js.
    Anonymous » » в форуме Javascript
    0 Ответы
    10 Просмотры
    Последнее сообщение Anonymous
  • Отображение информационного окна при падении по значке информации
    Anonymous » » в форуме Javascript
    0 Ответы
    3 Просмотры
    Последнее сообщение Anonymous
  • Отображение информационного окна при падении по значке информации
    Anonymous » » в форуме Javascript
    0 Ответы
    2 Просмотры
    Последнее сообщение Anonymous
  • Может ли адаптер.notifyItemRangeChanged(0, itemCount) заменить адаптер.notifyDataSetChanged()?
    Anonymous » » в форуме Android
    0 Ответы
    51 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Android»