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



目录
相关文章
|
1月前
|
Java Android开发
Android面试题经典之Glide取消加载以及线程池优化
Glide通过生命周期管理在`onStop`时暂停请求,`onDestroy`时取消请求,减少资源浪费。在`EngineJob`和`DecodeJob`中使用`cancel`方法标记任务并中断数据获取。当网络请求被取消时,`HttpUrlFetcher`的`cancel`方法设置标志,之后的数据获取会返回`null`,中断加载流程。Glide还使用定制的线程池,如AnimationExecutor、diskCacheExecutor、sourceExecutor和newUnlimitedSourceExecutor,其中某些禁止网络访问,并根据CPU核心数动态调整线程数。
77 2
|
3月前
|
Java Android开发
android 下载图片的问题
android 下载图片的问题
29 3
|
3月前
|
Android开发
Android通过手势(多点)缩放和拖拽图片
Android通过手势(多点)缩放和拖拽图片
35 4
|
7天前
|
数据处理 开发工具 数据安全/隐私保护
Android平台RTMP推送|轻量级RTSP服务|GB28181接入之文字、png图片水印的精进之路
本文探讨了Android平台上推流模块中添加文字与PNG水印的技术演进。自2015年起,为了满足应急指挥及安防领域的需求,逐步发展出三代水印技术:第一代为静态文字与图像水印;第二代实现了动态更新水印内容的能力,例如实时位置与时间信息;至第三代,则优化了数据传输效率,直接使用Bitmap对象传递水印数据至JNI层,减少了内存拷贝次数。这些迭代不仅提升了用户体验和技术效率,也体现了开发者追求极致与不断创新的精神。
|
7天前
|
缓存
Flutter Image从网络加载图片刷新、强制重新渲染
Flutter Image从网络加载图片刷新、强制重新渲染
14 1
|
11天前
|
自然语言处理 定位技术 API
Android经典实战之如何获取图片的经纬度以及如何根据经纬度获取对应的地点名称
本文介绍如何在Android中从图片提取地理位置信息并转换为地址。首先利用`ExifInterface`获取图片内的经纬度,然后通过`Geocoder`将经纬度转为地址。注意操作需在子线程进行且考虑多语言支持。
38 4
|
12天前
|
XML 前端开发 Android开发
Android经典实战之Kotlin中实现圆角图片和圆形图片
本文介绍两种实现圆角图像视图的方法。第一种是通过自定义Kotlin `AppCompatImageView`,重写`onDraw`方法使用`Canvas`和`Path`进行圆角剪裁。第二种利用Android Material库中的`ShapeableImageView`,简单配置即可实现圆角效果。两种方法均易于实现且提供动态调整圆角半径的功能。
13 0
|
2月前
|
XML API 开发工具
Android Bitmap 加载与像素操作
Android Bitmap 加载与像素操作
25 2
|
2月前
|
JSON 编解码 Apache
Android中使用HttpURLConnection实现GET POST JSON数据与下载图片
Android中使用HttpURLConnection实现GET POST JSON数据与下载图片
32 1
|
2月前
|
Java Android开发
18. 【Android教程】图片控件 ImageView
18. 【Android教程】图片控件 ImageView
35 4