Android----高德地图多个Marker加载网络图片出现图片不显示问题

简介: Android----高德地图多个Marker加载网络图片出现图片不显示问题

需求说要地图上展示的是mark,不是infowindow,加载出网络图片,由于app的marker比较多,没有达到需要的效果。


看了看高德地图api中有这个方法


markerOption.icon(BitmapDescriptorFactory.fromBitmap(BitmapFactory.decodeResource(getResources(),R.drawable.location_marker)));

fromBitmap里面的参数也可以是bitmap,于是可以自定义一个View把这个view转成bitmap。


这是做好所有工作以后,发现有的图片能显示出来,有的显示不出来。


由于加载图片的时候是异步的,有时候会在图片还没有加载完成的时候,view已经被转成bitmap,而这时Glide还在加载图片图,当glide加载工作完成时,要把图片展示在imageView上时,发现已经找不到这个imageView的id了,因此导致有些marker显示不出来图片。


于是我就添加了一个Glide图片加载完成的监听,在Glide图片加载完成之时再去把View转成bitmap,如下代码所示

Glide.with(this).load(list.get(i).getGasLogoSmall()).
                    placeholder(R.mipmap.gas_small_logo)
                    .transform(new GlideCircleTransform(getActivity()))
                    .error(R.mipmap.gas_small_logo)
//                    .listener(new RequestListener<String, GlideDrawable>() {
//                        @Override
//                        public boolean onException(Exception e, String model, Target<GlideDrawable> target, boolean isFirstResource) {
//   
//                            return false;
//                        }
//
//                        @Override
//                        public boolean onResourceReady(GlideDrawable resource, String model, Target<GlideDrawable> target, boolean isFromMemoryCache, boolean isFirstResource) {
                            Bitmap bitmap = convertViewToBitmap(view); 
//                          markerOption = new MarkerOptions().icon(BitmapDescriptorFactory.fromBitmap(bitmap))....            
//                          aMap.addMarker(markerOption);
//                          return false;
//                        }
//                    })
                    .into(imageView)

代码写完之后调试,发现还是不行,有的图片还是展示不出来,于是又苦思冥想,查找资料,发现自己错了,Glide在调用into方法的时候才去展示的图片,而RequestListener只表示图片加载的结果,这时并未在imageView 上展示,当还没有显示图片的imageView时候转bitmap,当然在marker上也显示不出来,是我对Glide框架了解的不够深,其实into()方法里不只可以填充imageView,还可以放SimpleTarget.于是又这样写了一下


Glide.with(this).load(list.get(i).getGasLogoSmall()).
        placeholder(R.mipmap.gas_small_logo)
        .transform(new GlideCircleTransform(getActivity()))
        .error(R.mipmap.gas_small_logo)
        .into(new SimpleTarget<GlideDrawable>() {
            @Override
            public void onResourceReady(GlideDrawable resource, GlideAnimation<? super GlideDrawable> glideAnimation) {
                //展示图片
                imageView.setImageDrawable(resource);
                textView.setText(list.get(I).getGasName() + "");
                Bitmap bitmap = convertViewToBitmap(view);
                markerOption = new MarkerOptions().icon(BitmapDescriptorFactory.fromBitmap(bitmap))
                        .position..;
                aMap.addMarker(markerOption);
            }
        });

就这样,在显示图片之后把View转bitmap,都完美的显示在了marker上


BitmapDescriptorFactory.fromView(view)即使这样还是有的图片加载不出来,查看fromView源码,其实内里也是把view转成了Bitmap



目录
相关文章
|
3月前
|
机器学习/深度学习 PyTorch 算法框架/工具
目标检测实战(一):CIFAR10结合神经网络加载、训练、测试完整步骤
这篇文章介绍了如何使用PyTorch框架,结合CIFAR-10数据集,通过定义神经网络、损失函数和优化器,进行模型的训练和测试。
209 2
目标检测实战(一):CIFAR10结合神经网络加载、训练、测试完整步骤
|
19天前
|
Ubuntu Linux 开发者
Ubuntu20.04搭建嵌入式linux网络加载内核、设备树和根文件系统
使用上述U-Boot命令配置并启动嵌入式设备。如果配置正确,设备将通过TFTP加载内核和设备树,并通过NFS挂载根文件系统。
68 15
|
5月前
|
移动开发 TensorFlow 算法框架/工具
只保存和加载网络权重
【8月更文挑战第21天】只保存和加载网络权重。
39 2
|
2月前
|
缓存 JavaScript
Vue加载网络组件(远程组件)
【10月更文挑战第23天】在 Vue 中实现加载网络组件(远程组件)可以通过多种方式来完成。
|
3月前
|
网络协议 Shell 网络安全
解决两个 Android 模拟器之间无法网络通信的问题
让同一个 PC 上运行的两个 Android 模拟器之间能相互通信,出(qiong)差(ren)的智慧。
41 3
|
4月前
|
存储 缓存 编解码
Android经典面试题之图片Bitmap怎么做优化
本文介绍了图片相关的内存优化方法,包括分辨率适配、图片压缩与缓存。文中详细讲解了如何根据不同分辨率放置图片资源,避免图片拉伸变形;并通过示例代码展示了使用`BitmapFactory.Options`进行图片压缩的具体步骤。此外,还介绍了Glide等第三方库如何利用LRU算法实现高效图片缓存。
84 20
Android经典面试题之图片Bitmap怎么做优化
|
5月前
|
安全 网络安全 Android开发
安卓与iOS开发:选择的艺术网络安全与信息安全:漏洞、加密与意识的交织
【8月更文挑战第20天】在数字时代,安卓和iOS两大平台如同两座巍峨的山峰,分别占据着移动互联网的半壁江山。它们各自拥有独特的魅力和优势,吸引着无数开发者投身其中。本文将探讨这两个平台的特点、优势以及它们在移动应用开发中的地位,帮助读者更好地理解这两个平台的差异,并为那些正在面临选择的开发者提供一些启示。
135 56
|
5月前
|
数据处理 开发工具 数据安全/隐私保护
Android平台RTMP推送|轻量级RTSP服务|GB28181接入之文字、png图片水印的精进之路
本文探讨了Android平台上推流模块中添加文字与PNG水印的技术演进。自2015年起,为了满足应急指挥及安防领域的需求,逐步发展出三代水印技术:第一代为静态文字与图像水印;第二代实现了动态更新水印内容的能力,例如实时位置与时间信息;至第三代,则优化了数据传输效率,直接使用Bitmap对象传递水印数据至JNI层,减少了内存拷贝次数。这些迭代不仅提升了用户体验和技术效率,也体现了开发者追求极致与不断创新的精神。
|
5月前
|
缓存
Flutter Image从网络加载图片刷新、强制重新渲染
Flutter Image从网络加载图片刷新、强制重新渲染
182 1
|
5月前
|
自然语言处理 定位技术 API
Android经典实战之如何获取图片的经纬度以及如何根据经纬度获取对应的地点名称
本文介绍如何在Android中从图片提取地理位置信息并转换为地址。首先利用`ExifInterface`获取图片内的经纬度,然后通过`Geocoder`将经纬度转为地址。注意操作需在子线程进行且考虑多语言支持。
306 4