第一个GoogleMaps标记未显示,但第二个标记显示

时间:2016-06-27 19:30:26

标签: android google-maps

标记有一个icon属性,它包含用户Facebook个人资料图片的位图。 我不确定为什么第一个标记没有加载。但是,如果你发布第二个,第三个或第四个(等等......)它完全正常!

除了下面的代码块之外,我的代码中没有添加任何其他标记。

编辑:这很重要。第一次尝试时,'bitmap'值似乎为null。因此看起来条件为'bitmap!= null'的if语句正在捕获它并阻止它发布第一个标记......

static Bitmap bitmap = null;
private Target loadtarget;
globalMap.setOnMapLongClickListener(new GoogleMap.OnMapLongClickListener() {
        @Override
        public void onMapLongClick(LatLng point) {
            vibe.vibrate(100);
            AccessToken accessToken = AccessToken.getCurrentAccessToken();
            MarkerOptions marker = new MarkerOptions().position(
                    new LatLng(point.latitude, point.longitude))
                    .title("New Marker");
            Log.e("TAG", accessToken.getUserId());

            String imageURL = new String("https://graph.facebook.com/" + accessToken.getUserId() + "/picture?type=small");
            loadBitmap(imageURL);

            if(bitmap!=null) {
                globalMap.addMarker(marker
                        .position(point)
                        .icon(BitmapDescriptorFactory.fromBitmap(bitmap))
                        .anchor(0.5f, 1));
            }

        }
    });
}

public void loadBitmap(String url) {
    if (loadtarget == null) loadtarget = new Target() {
        @Override
        public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
            // do something with the Bitmap
            handleLoadedBitmap(bitmap);
        }

        @Override
        public void onBitmapFailed(Drawable errorDrawable) {

        }

        @Override
        public void onPrepareLoad(Drawable placeHolderDrawable) {

        }

    };

    Picasso.with(getActivity()).load(url).into(loadtarget);
}

public void handleLoadedBitmap(Bitmap b) {
    bitmap = b;
}

3 个答案:

答案 0 :(得分:0)

关注Documentation

static Bitmap bitmap = null;
private Target loadtarget;

 globalMap.setOnMapLoadedCallback(new OnMapLoadedCallback() {
        @Override
        public void onMapLoaded() {

            globalMap.setOnMapLongClickListener(new GoogleMap.OnMapLongClickListener() { 
        @Override 
        public void onMapLongClick(LatLng point) {
            vibe.vibrate(100); 
            AccessToken accessToken = AccessToken.getCurrentAccessToken(); 
            MarkerOptions marker = new MarkerOptions().position(
                    new LatLng(point.latitude, point.longitude))
                    .title("New Marker");
            Log.e("TAG", accessToken.getUserId());

            String imageURL = new String("https://graph.facebook.com/" + accessToken.getUserId() + "/picture?type=small");
            loadBitmap(imageURL);

            if(bitmap!=null) {
                globalMap.addMarker(marker
                        .position(point)
                        .icon(BitmapDescriptorFactory.fromBitmap(bitmap))
                        .anchor(0.5f, 1));
            } 

        } 
    }); 
        }
    });



    public void loadBitmap(String url) {
    if (loadtarget == null) loadtarget = new Target() {
        @Override 
        public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
            // do something with the Bitmap 
            handleLoadedBitmap(bitmap);
        } 

        @Override 
        public void onBitmapFailed(Drawable errorDrawable) {

        } 

        @Override 
        public void onPrepareLoad(Drawable placeHolderDrawable) {

        } 

    }; 

    Picasso.with(getActivity()).load(url).into(loadtarget);
} 

public void handleLoadedBitmap(Bitmap b) {
    bitmap = b;
} 

答案 1 :(得分:0)

你是对的,focus在第一次长按时会为空,因为没有时间加载位图。您正在调用load()并在尝试显示位图之后立即调用。

您可以不在长按一下监听器中加载位图,但之前可能位于您设置该监听器的相同代码位置。

bitmap

答案 2 :(得分:0)

我发现为什么它没有在第一次尝试时发布。这是因为我调用我的方法loadBitmap(..)为时已晚,我觉得它检索图像并将其加载到目标值的过程对于立即放置标记的clickListener来说太长了。我只是假设我之前在我的方法onMapReady()中调用它,并且完成了这项工作。