1

在长时间搜索如何闪烁标记后,我在我的项目中使用谷歌地图 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. 而且我正在使用反向地理编码来获取地址,因此在闪烁时无法单击标记。请建议任何其他方式来闪烁标记?
4

2 回答 2

1

尝试替换setVisiblesetIcon. 这样做时,您需要为图标准备另一个可绘制对象,其大小与 相同bus4.png,但所有像素都是透明的。

请注意,有一个与此相关的错误setIcon会导致信息窗口消失。

作为旁注,您的代码中有几个问题:

  1. 使用Timer是浪费。它使用Thread,您不需要。考虑Handler改用。
  2. 您(可能)有内存泄漏。销毁Timer时不会停止工作。如果您还没有这样做,Activity则需要这样做。cancel如果切换到Handler,请记住删除您发送的任何Runnables 或s。Message
于 2013-09-14T17:39:05.960 回答
0

通常谷歌地图更忙:有很多标记。因此,您可以将 Scheduledthreadpoolexecutor 与 runnable 一起使用。

您的 blinkMarket 方法可能更短,例如:'current.setVisible(!marker)'。我很害怕使用 Timer 不是正确的方法。你可以使用带有 postDelayed 的 Handler 来做同样的事情。如果marker的闪烁取决于某些条件,则应重复检查,而不应生成两次闪烁任务。

于 2015-01-02T23:23:54.487 回答