如何先显示地图然后下载图像标记?
Posted
技术标签:
【中文标题】如何先显示地图然后下载图像标记?【英文标题】:How to show maps first and then download image markers? 【发布时间】:2018-05-17 12:58:03 【问题描述】:我正在尝试显示custom marker with images
这里的图片是从互联网下载的。
一切都很好,得到了预期的结果。
这是输出图像
但是在这里显示地图需要很多时间,它正在下载图像然后显示地图。有没有办法先显示maps
,然后下载图片并设置markers
。
这是我尝试过的代码
@Override
public void onMapReady(GoogleMap googleMap)
mMap = googleMap;
MapsInitializer.initialize(this);
LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
Criteria criteria = new Criteria();
assert locationManager != null;
String provider = locationManager.getBestProvider(criteria, true);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M)
if (ActivityCompat.checkSelfPermission(this,
Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED
&& ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED)
requestPermissions(new String[]
Manifest.permission.ACCESS_FINE_LOCATION,
Manifest.permission.ACCESS_COARSE_LOCATION
, LOCATION_REQUEST_CODE);
return;
mLastLocation = locationManager.getLastKnownLocation(provider);
userLatLng = new LatLng(mLastLocation.getLatitude(), mLastLocation.getLongitude());
mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(userLatLng, 14.0f));
mMap.setMyLocationEnabled(true);
mMap.getUiSettings().setZoomControlsEnabled(true);
mMap.setBuildingsEnabled(true);
try
bussinessBitmap = new AddMarkers(imgUrl2).execute().get();
catch (InterruptedException e)
e.printStackTrace();
catch (ExecutionException e)
e.printStackTrace();
if (bussinessLatLng != null)
bussinessMarker = mMap.addMarker(new MarkerOptions()
.position(bussinessLatLng)
.title(businessUser)
.snippet(getLocation(bussinessLatLng))
.icon(BitmapDescriptorFactory.fromBitmap(getMarkerBitmapFromView(bussinessBitmap))));
else
bussinessMarker = mMap.addMarker(new MarkerOptions()
.position(bussinessLatLng)
.title(businessUser)
.snippet(getLocation(bussinessLatLng)));
try
userBitmap = new AddMarkers(imgUrl).execute().get();
catch (InterruptedException e)
e.printStackTrace();
catch (ExecutionException e)
e.printStackTrace();
if (mLastLocation != null)
if (userBitmap != null)
userMarker = mMap.addMarker(new MarkerOptions().position(userLatLng)
.title(username)
.snippet(getLocation(userLatLng))
.icon(BitmapDescriptorFactory.fromBitmap(getMarkerBitmapFromView(userBitmap))));
else
userMarker = mMap.addMarker(new MarkerOptions().position(userLatLng)
.title(username)
.snippet(getLocation(userLatLng)));
if(!(userLatLng == null || bussinessLatLng == null))
Polyline distanceLine = mMap.addPolyline(new PolylineOptions().add(userLatLng, bussinessLatLng).width(4).color(Color.GREEN));
我正在使用asynctask
下载图片,这里是代码
public AddMarkers(String imgUrl)
this.imgUrl = imgUrl;
@Override
protected void onPreExecute()
super.onPreExecute();
pd = new ProgressDialog(MapsActivity.this);
pd.setTitle("Loading");
pd.setMessage("Please wait..");
pd.show();
@Override
protected Bitmap doInBackground(Void... voids)
URL url;
try
url = new URL(imgUrl);
return BitmapFactory.decodeStream(url.openConnection().getInputStream());
catch (MalformedURLException e)
e.printStackTrace();
catch (IOException e)
e.printStackTrace();
return null;
@Override
protected void onPostExecute(Bitmap bitmap)
super.onPostExecute(bitmap);
if (pd != null && pd.isShowing()) pd.dismiss();
【问题讨论】:
使用 HashMap : ***.com/questions/37324285/… 我得到了预期的结果我有性能问题 地图仅在图片下载后可见 该图像是上述代码的输出,但它会在 4-5 秒后显示 【参考方案1】:GoogleMap
对象有一个方法来设置地图加载时的回调。在您的 onMapReady
方法中添加以下内容:
mMap.setOnMapLoadedCallback(this);
并在你的类中有一个方法,然后实现回调:
@Override
public void OnMapLoaded()
AddMarkers addMarkersTask = new AddMarkers(url);
addMarkersTask.execute();
【讨论】:
以上是关于如何先显示地图然后下载图像标记?的主要内容,如果未能解决你的问题,请参考以下文章
Android-Maps-Extensions 异步加载标记图像
如何将图像从Firebase下载到Swift,然后更快地在UIImageView中显示?
如何从地图上的多个标记中单击一个标记,然后使用标记的信息转到一个活动