谷歌地图addMarker()需要一些时间来显示标记。

时间:2018-02-09 12:03:25

标签: java android google-maps

在谷歌地图中我想要显示10-15个标记的多个标记,但这些标记需要一些时间才能在地图上显示。请看一下我的代码

 Bitmap markerBitmap;
    Picasso.with(getContext())
    .load(R.drawable.marker_icon)
     .resize(markerSize, markerSize)
     .into(new Target() {
        @Override
       public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
          markerBitmap=bitmap;
        }

     @Override
    public void onBitmapFailed(Drawable errorDrawable) {
      }

      @Override
     public void onPrepareLoad(Drawable placeHolderDrawable) {
     }
     });

for(int i=0; i<10;i++){
 MarkerOptions markerOptions = new MarkerOptions();
 markerOptions.position(latLng);
 markerOptions.rotation((float) bearing);
 markerOptions.icon(BitmapDescriptorFactory.fromBitmap(markerBitmap));
map.addMarker(markerOptions);
}

2 个答案:

答案 0 :(得分:0)

它可能是一系列事件&#34;问题

你打开一个从资源加载图片的请求,然后当资源加载结束时,你设置了一个BitmapMarker(我不知道你是怎么做的,任何进入anonoymous内部类的对象必须是最终的,并且可以& #39; t被改变)。

创建请求后,您尝试创建10个标记。 (无论请求是否结束)

解决方案可能是在请求结束时推迟添加标记。我们鼓励您阅读函数式编程以了解原因。

Picasso.with(getContext())
.load(R.drawable.marker_icon)
 .resize(markerSize, markerSize)
 .into(new Target() {
    @Override
   public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
     Bitmap markerBitmap;
     markerBitmap=bitmap;

     for(int i=0; i<10;i++){
         MarkerOptions markerOptions = new MarkerOptions();
         markerOptions.position(latLng);
         markerOptions.rotation((float) bearing);
         markerOptions.icon(BitmapDescriptorFactory.fromBitmap(markerBitmap));
     map.addMarker(markerOptions);
       }
    }

 @Override
public void onBitmapFailed(Drawable errorDrawable) {
  }

  @Override
 public void onPrepareLoad(Drawable placeHolderDrawable) {
 }
 });

答案 1 :(得分:0)

这是解决我的问题的解决方法。

 @Override
        public void onMapReady(GoogleMap googleMap) {
            if(googleMap!=null){
                Picasso.with(getContext())
                        .load(R.drawable.marker_icon)
                        .resize(markerSize, markerSize)
                        .into(new Target() {
                            @Override
                            public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
                                Bitmap markerBitmap;

                                markerBitmap=bitmap;

                                for(int i=0; i<10;i++){
                                    MarkerOptions markerOptions = new MarkerOptions();
                                    markerOptions.position(latLng);
                                    markerOptions.rotation((float) bearing);
                                    markerOptions.icon(BitmapDescriptorFactory.fromBitmap(markerBitmap));
                                    map.addMarker(markerOptions);
                                }
                            }

                            @Override
                            public void onBitmapFailed(Drawable errorDrawable) {
                            }

                            @Override
                            public void onPrepareLoad(Drawable placeHolderDrawable) {
                            }
                        });

            }
        }