1

マーカーを点滅させる方法を長い間検索した後、Googleマップ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

に置き換えsetVisibleてみてくださいsetIcon。それを行うときは、 と同じサイズのアイコン用に別のドローアブルを準備する必要がありますbus4.pngが、すべてのピクセルが透明です。

情報ウィンドウが消えることに関連するバグがあることに注意してください。setIcon

補足として、コードにいくつかの問題があります。

  1. 使うTimerのはもったいない。Thread必要のない を使用します。Handler代わりに使用することを検討してください。
  2. あなたは(おそらく)メモリリークを起こしています。が破壊されTimerても動作を停止しません。まだ行っていない場合は、それActivityが必要です。cancelに切り替える場合は、送信したやHandlerを削除してください。RunnableMessage
于 2013-09-14T17:39:05.960 に答える
0

通常、Google マップはより込み入っています: 多くのマーカーがあります。そのため、runnable で Scheduledthreadpoolexecutor を使用できます。

「current.setVisible(!marker)」のように、blinkMarket メソッドを短くすることができます。Timer を使用するのは正しいアプローチではありません。postDelayed で Handler を使用して同じことを行うことができます。マーカーの点滅が何らかの条件に依存する場合は、繰り返しチェックする必要があり、点滅するタスクが 2 回生成されないようにする必要があります。

于 2015-01-02T23:23:54.487 に答える