问题描述
当我尝试通过 imageloader 库加载图像列表时遇到问题 在 ClusterRenderer 的许多标记中
override fun onDataChange(snapshot: DataSnapshot) {
mGoogleMap?.clear()
var arrays=ArrayList<Firebaseusermodel>()
for(item in snapshot.children){
var user: FirebaseusermodelMArks?=item.getValue(FirebaseusermodelMArks::class.java)
if(!user!!.firebaseID.equals(firebaseid)){
mClusterManager!!.addItem(user)
mClusterManager!!.cluster();
}
}
class UserRender(context: Context,map: GoogleMap,clusterManager: ClusterManager ) : DefaultClusterRenderer(context,map,clusterManager) {
private var iconGenerator: IconGenerator? = null
private var clusterIconGenerator: IconGenerator? = null
private var imageView: ImageView? = null
private var clusterImageView: ImageView? = null
private var markerWidth = 0
private var markerHeight = 0
private val TAG = "ClusterRenderer"
init {
clusterIconGenerator = IconGenerator(context.applicationContext)
val clusterView: View = LayoutInflater.from(context).inflate(R.layout.custome_mark,null)
clusterIconGenerator!!.setContentView(clusterView)
clusterImageView = clusterView.findViewById(R.id.profile_image)
iconGenerator = IconGenerator(context.applicationContext)
imageView = ImageView(context.applicationContext)
markerWidth = context.resources.getDimension(R.dimen.d6).toInt()
markerHeight = context.resources.getDimension(R.dimen.d6).toInt()
imageView!!.setLayoutParams(ViewGroup.LayoutParams(markerWidth,markerHeight))
val padding =
context.resources.getDimension(R.dimen.d1).toInt()
imageView!!.setPadding(padding,padding,padding)
iconGenerator!!.setContentView(imageView)
}
override fun onClusterItemRendered(clusterItem: FirebaseusermodelMArks?,marker: Marker?) {
Coroutinescope(dispatchers.Main).launch {
BasicTools.loadImage(clusterItem?.image!!,imageView!!,object : DownloadListener {
override fun completed(status: Boolean,bitmap: Bitmap) {
imageView!!.setimageBitmap(bitmap)
val icon = iconGenerator!!.makeIcon(clusterItem?.name)
marker!!.setIcon(BitmapDescriptorFactory.fromBitmap(bitmap))
marker.isVisible=true
}
})}
}
/*---------------------------------------------------------------*/
override fun onClusterRendered(cluster: Cluster<FirebaseusermodelMArks>?,marker: Marker?) {
super.onClusterRendered(cluster,marker)
val iterator: Iterator<FirebaseusermodelMArks> = cluster!!.items.iterator()
Coroutinescope(dispatchers.Main).launch {
BasicTools.loadImage(
iterator.next()?.image!!,clusterImageView!!,object : DownloadListener {
override fun completed(status: Boolean,bitmap: Bitmap) {
clusterImageView!!.setimageBitmap(bitmap)
Log.i("TEST_TEST","${iterator.next().name}----------------")
val icon = iconGenerator!!.makeIcon(iterator.next()?.name)
marker!!.setIcon(BitmapDescriptorFactory.fromBitmap(bitmap))
}
})
}
}
override fun shouldRenderAsCluster(cluster: Cluster<FirebaseusermodelMArks>?): Boolean {
return cluster!!.getSize() > 1
}
}
3-loadImage 函数有这个参数
有趣的loadImage(url: String,image_view: ImageView,listener: DownloadListener?)
代码有什么问题?
解决方法
答案是使用重复的函数
private fun saveBitmap(arrays: ArrayList<FirebaseUserModelMArks>,firstLanuch:Boolean=false) {
if(firstLanuch)
index=arrays.size-1
if(index>=0){
BasicTools.loadImage(arrays.get(index).image!!,iv_test!!,object : DownloadListener {
override fun completed(status: Boolean,bitmap: Bitmap) {
// iv_test!!.setImageBitmap(bitmap)
arrays.get(index).imageBitmap=bitmap
mClusterManager!!.addItem(arrays.get(index))
Log.i("TEST_TEST","$index")
index--
saveBitmap(arrays)
}
})
}else {
mClusterManager?.cluster()
}
}
在添加所有您想要数组列表的用户后添加此功能 像这样
override fun onDataChange(snapshot: DataSnapshot) {
mGoogleMap?.clear()
mClusterManager?.clearItems()
var arrays=ArrayList<FirebaseUserModelMArks>()
for(item in snapshot.children){
var user: FirebaseUserModelMArks?
=item.getValue(FirebaseUserModelMArks::class.java)
if(!user!!.firebaseID.equals(firebaseid)){
// mClusterManager!!.addItem(user)
arrays.add(user)
Log.i("TEST_TEST","${user.name}---------")
}
}
// mClusterManager!!.cluster();
saveBitmap(arrays,true)