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

android谷歌地图v2中的闪烁标记,android,google-maps,google-maps-markers,reverse-geocoding,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))); markertim

在长时间搜索如何闪烁标记后,我在使用谷歌地图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;
}
因此,上面的操作很好,而且标记正在闪烁,但我的怀疑是

  • 上述代码是否会使用更多内存进行闪烁
  • 我使用反向地理编码来获取地址,所以闪烁时无法单击标记。请建议其他闪烁标记的方式

  • 尝试将
    setVisible
    替换为
    setIcon
    。进行此操作时,您需要准备另一个与bus4.png大小相同但所有像素都透明的可绘制图标

    与导致信息窗口消失的设置图标相关的注释

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

  • 使用
    计时器
    是浪费。它使用
    线程
    ,这是您不需要的。考虑使用<代码>汉德勒< />代码>
  • 你(可能)有内存泄漏<当
    活动
    被破坏时,code>定时器将不会停止工作。如果您还没有这样做,您需要取消它。如果切换到
    处理程序
    ,请记住删除您发送的任何
    Runnable
    s或
    消息
    s

  • 尝试将
    setVisible
    替换为
    setIcon
    。进行此操作时,您需要准备另一个与bus4.png大小相同但所有像素都透明的可绘制图标

    与导致信息窗口消失的设置图标相关的注释

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

  • 使用
    计时器
    是浪费。它使用
    线程
    ,这是您不需要的。考虑使用<代码>汉德勒< />代码>
  • 你(可能)有内存泄漏<当
    活动
    被破坏时,code>定时器将不会停止工作。如果您还没有这样做,您需要取消它。如果切换到
    处理程序
    ,请记住删除您发送的任何
    Runnable
    s或
    消息
    s

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

    您的blinkMarket方法可以更短,如下所示:
    'current.setVisible(!marker')。我感到震惊的是,使用计时器不是正确的方法。您可以使用带有postDelayed的处理程序执行相同的操作。如果标记的闪烁取决于某些条件,则应重复检查,而不应生成两次闪烁任务

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

    您的blinkMarket方法可以更短,如下所示:
    'current.setVisible(!marker')。我感到震惊的是,使用计时器不是正确的方法。您可以使用带有postDelayed的处理程序执行相同的操作。如果标记的闪烁取决于某些条件,则应重复检查,而不应生成两次闪烁任务

    感谢您讲述内存泄漏和错误,我已经取消了onDestroy()中的计时器。我对处理程序了解不多,所以请不要使用..谢谢你告诉我内存泄漏和错误,我已经取消了onDestroy()中的计时器。我不太了解处理程序,所以请不要使用..请共享更新的代码参考此链接,有关闪烁效果请共享更新的代码参考此链接,有关闪烁效果