android谷歌地图v2中的闪烁标记

时间:2013-09-14 04:14:54

标签: android google-maps google-maps-markers reverse-geocoding

经过长时间搜索如何使标记闪烁后,我使用谷歌地图v2在我的项目中想出了这段代码。这是代码..

MyMarker = map.addMarker(new MarkerOptions().position(current_loc).title(address).snippet(city).
                        icon(BitmapDescriptorFactory.fromResource(R.drawable.bus4)));

                markertimer = new Timer();
                markertimer.scheduleAtFixedRate(new TimerTask() {

                    @Override
                    public void run() {
                        // TODO Auto-generated method stub
                        runOnUiThread(new Runnable() {
                            @Override
                            public void run() {
                                // TODO Auto-generated method stub
                                blinkMarker();
                            }
                        });
                    }
                }, 0, 500);

这里是blinkMarker方法..

private boolean blinkMarker(){


    if(marker == true){
        current.setVisible(true);
        marker = false;
        }
        else if(marker == false){
        current.setVisible(false);
        marker = true;
        }
    return marker;
}

所以上面的工作正常并且标记闪烁,但我怀疑是

  1. 以上代码会使用更多内存进行闪烁吗?
  2. 我正在使用反向地理编码来获取地址,因此无法在闪烁时单击标记。请建议任何其他方式使标记闪烁?

2 个答案:

答案 0 :(得分:1)

尝试将setVisible替换为setIcon。这样做时,您需要为与bus4.png大小相同的图标准备另一个drawable,但所有像素都是透明的。

注意与setIcon相关的导致信息窗口消失的there is a bug

请注意代码中的几个问题:

  1. 使用Timer是浪费的。它使用您不需要的Thread。请考虑使用Handler代替。
  2. 你(可能)有内存泄漏。 Timer被销毁后,Activity不会停止工作。如果你不这样做,你需要cancel它。如果切换为Handler,请重置以删除您发送的所有RunnableMessage

答案 1 :(得分:0)

Google地图通常比较繁忙:有很多标记。因此,您可以将Scheduledthreadpoolexecutor与runnable一起使用。

你的blinkMarket方法可能更短,如下所示: '(!标记)current.setVisible&#39 ;.我担心使用Timer是不正确的方法。你可以使用带有postDelayed的Handler来做同样的事情。如果标记的闪烁取决于某些条件,则应重复检查,而不应生成两次闪烁任务。