簡體   English   中英

Android Google Maps v2中的閃爍標記

[英]Blinking marker in android Google maps v2

在長時間搜索如何使標記閃爍之后,我在使用Google Maps 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. 而且我正在使用反向地址解析來獲取地址,因此閃爍時無法單擊標記。 請提出其他使標記閃爍的方法嗎?

嘗試將setVisible替換為setIcon 這樣做時,您需要為圖標准備另一個可繪制對象,其大小與bus4.png相同,但所有像素都是透明的。

請注意, 有一個setIcon相關的錯誤會導致信息窗口消失。

附帶說明一下,您的代碼中存在幾個問題:

  1. 使用Timer很浪費。 它使用不需要的Thread 考慮改用Handler
  2. 您(可能)有內存泄漏。 Activity銷毀后, Timer不會停止工作。 如果尚未cancel ,則需要將其cancel 如果切換到Handler ,請退格以刪除您發送的所有RunnableMessage

通常,谷歌地圖比較忙:帶有許多標記。 因此,您可以將Scheduledthreadpoolexecutor與runnable一起使用。

您的blinkMarket方法可能更短,例如:“ current.setVisible(!marker)”。 我很奇怪使用Timer是不正確的方法。 您可以將Handler與postDelayed一起使用。 如果標記的閃爍取決於某種情況,則應重復檢查,而不應該兩次生成閃爍任務。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM