1

以下のコードは次のことを行います: 「フォーカス」チェックボックスをオンにすると、マップはマップ内の単一のオーバーレイ アイテムにアニメーション化されます。問題が 1 つあります。マップをドラッグして、チェックボックスをオンにしたときにマップがまだ移動していると、チェックボックスに視覚的な効果がありません。何か案は?

List<Overlay> mapOverlays;
Drawable drawable;
AssetMarkersOverlay itemizedOverlay;
private CheckBox autofocusCheckBox;
MapView mapView;

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

    setContentView(R.layout.main);

    mapView = (MapView) findViewById(R.id.mapview);
    mapView.getController().setZoom(4);
    mapView.setBuiltInZoomControls(true);

    mapOverlays = mapView.getOverlays();
    drawable = this.getResources().getDrawable(R.drawable.bubble_blue);
    itemizedOverlay = new AssetMarkersOverlay(drawable);

    String assetName = "TEST";
    int lat = 3;
    int lon = 3;

    ArrayList<GeoPoint> geoPointList = new ArrayList<GeoPoint>();

    GeoPoint point = new GeoPoint(lat, lon);

    autofocusCheckBox = (CheckBox) findViewById(R.id.showInMap);
    autofocusCheckBox.setTag(point);
    autofocusCheckBox
            .setOnCheckedChangeListener(new OnCheckedChangeListener() {

                public void onCheckedChanged(CompoundButton buttonView,
                        boolean isChecked) {
                    if (isChecked && buttonView.getTag() != null) {
                        focusAsset((GeoPoint) buttonView.getTag());
                    }
                }
            });

    geoPointList.add(point);
    itemizedOverlay.addOverlay(lat, lon, assetName, assetName);

    mapOverlays = mapView.getOverlays();
    mapOverlays.clear();
    mapView.postInvalidate();
    mapOverlays.add(itemizedOverlay);
    fitPoints(geoPointList, mapView);
    mapView.postInvalidate();

}

private void focusAsset(GeoPoint point) {
    mapView.requestFocus();
    mapView.clearAnimation();
    mapView.getController().stopAnimation(true);
    mapView.getController().setZoom(14);
    mapView.getController().animateTo(point);
    mapView.postInvalidate();
}
4

1 に答える 1

0

同様の問題を修正するために AsyncTask を使用しました。時々機能しますが、常に機能するわけではありません。基本的に、少し遅れて animateTo を数回呼び出すだけです。getMapCenter は、現在の真の中心ではなく、アニメーション化されている場所を返すように見えることに注意してください。これを使用して、新しい場所にまだ到達しているかどうかを検出しようとしたため、多くの場合は機能しません。また、少なくとも ICS では 1000 ミリ秒を超えるアニメーションはないように見えるため、呼び出しを行う前に長く待つことで問題が解決する可能性があります。

于 2012-05-29T09:57:19.290 に答える