1

私は自分ので異常な動作を経験していMapViewます。問題に影響を与える可能性があるかどうかわからない方法でRoboGuiceを使用しています。

問題は、マップでを有効にすると、そのMyLocationListener上のすべてのオーバーレイが無限に再描画され続けることです。
この例を見てください:

MyMapActivity

@ContentView(R.layout.map)
public class MyMapActivity extends RoboMapActivity {

@InjectView(R.id.map)
private MapView map;

private List<Overlay> mapOverlays;
private MyLocationOverlay compass;
private TestOverlay testOverlay;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    map.setBuiltInZoomControls(true);
    mapOverlays = map.getOverlays();
    compass = new MyLocationOverlay(this, map);
    testOverlay = new TestOverlay();
}

@Override
protected void onResume() {
    super.onResume();
    compass.enableCompass();
    refreshMap();
}

private void refreshMap() {
    mapOverlays.clear();
    mapOverlays.add(testOverlay);
}

@Override
protected void onPause() {
    compass.disableCompass();
    super.onPause();
}

@Override
protected boolean isRouteDisplayed() {
    return false;
}
}

TestOverlay

public class TestOverlay extends Overlay {

@Override
public void draw(Canvas arg0, MapView arg1, boolean arg2) {
    System.out.println("drawing...");
    super.draw(arg0, arg1, arg2);
}
}

これを実行すると、drawing...1秒間に約10回印刷されます。しかし、この行をコメントアウトしてのコンパス
を有効にしない場合は、次のようになります。MyLocationOverlay

// compass.enableCompass();

その後、再描画は停止します。
なぜこれが起こるのかについて何か考えはありますか?それはバグですか、それとも私は何か間違ったことをしていますか?

編集

RoboGuiceを使用しないプロジェクトで再現しただけでも、問題は発生します。
これからはそのコンパスなしでやろうと思います

4

1 に答える 1

1

なぜそれが起こるのか

デバイスの回転とは関係なく、コンパスが常に北 (または他の方向) を指すようにするため、磁気センサーの連続読み取りとコンパスの連続読み取りが必要です。

MapViewオーバーレイの再描画を強制するために使用するには、変更されなかった Ovarlay を含む、マップ内のすべてのオーバーレイの再描画を要求する方法を使用する必要がありますinvalidate()

解決方法

私は使用したことがないRoboGuiceので、標準的なソリューションについてのみアドバイスできます。

コンパスを正しい方向に向けたい場合は、再描画を実際に停止することはできません。また、オーバーレイの 1 つだけを描画することもできません (ビットマップに描画しているため、ビットマップをクリアして、すべてのオーバーレイを再描画する必要があります)。その上で)。

私の場合、これを改善するために 2 つの調整を使用しました。

  • センサーの更新頻度を最小頻度値に設定しました。
  • オーバーレイを更新する前に、現在の方向とコンパスの描画に使用された方向を比較します。それらがわずかな角度 (3 度など) で異なる場合は、更新を無視し、オーバーレイの再描画を要求するために、より大きな違いがある更新を待ちます。

よろしく。

于 2012-11-26T20:22:21.117 に答える