我使用标记填充地图,标记包含从互联网获取的自定义图标,然后缓存在磁盘上以供重复使用。
我注意到此语句出现,而对于我的ImageLoadingListener
,onLoadingCancelled
被调用,导致标记图标无法显示,并显示默认的Google Marker(红色尖点)。
以下是我的代码。
循环浏览一些数据并创建标记:
for(SomeObject so: listOfObjects){
Marker marker = mGoogleMap.addMarker(new MarkerOptions().position(new LatLng(so.getLatitude(), so.getLongitude())));
loadMarkerBitmap(marker,so);
}
设置标记图标的loadMarkerBitmap
方法:
ImageLoader.getInstance().loadImage(so.getImageURL , new ImageLoadingListener() {
@Override
public void onLoadingStarted(String imageUri, View view) {
}
@Override
public void onLoadingFailed(String imageUri, View view, FailReason failReason) {
}
@Override
public void onLoadingComplete(String imageUri, View view, Bitmap categoryIcon) {
Bitmap combined = Bitmap.createBitmap(mapPin.getWidth(), mapPin.getHeight(), Bitmap.Config.ARGB_8888);
Bitmap scaledIcon = Bitmap.createScaledBitmap(categoryIcon,(mapPin.getWidth() * 45) / 100, (mapPin.getHeight() * 45) / 100,true);
Canvas canvas = new Canvas(combined);
canvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR);
canvas.drawBitmap(mapPin,0,0, null);
canvas.drawBitmap(scaledIcon,canvas.getWidth()/2 - scaledIcon.getWidth()/2,(canvas.getHeight()/2 - scaledIcon.getHeight()/2), null);
marker.setIcon(BitmapDescriptorFactory.fromBitmap(combined));
}
@Override
public void onLoadingCancelled(String imageUri, View view) {
}
});
不确定是什么问题。我尝试过创建一个强引用ImageLoadListener
,但遇到了同样的问题。
答案 0 :(得分:1)
所以问题是根据源代码loadImage调用取消相同图像URI的先前任务,例如如果您使用此网址启动任务,例如http://www.google.fr/images/srpr/logo11w.png"然后另一个,而第一个正在进行将取消它
解决方案是使用NonViewAware,例如
这解决了我的问题,显示所有图像,没有取消任何内容