Android----高德地圖多個Marker載入網路圖片出現圖片不顯示問題
阿新 • • 發佈:2019-02-03
需求說要地圖上展示的是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