2012-04-30 8 views
1

以下のコードでは、次のコードを実行します。 [フォーカス]チェックボックスをオンにすると、マップはマップ内の単一のオーバーレイアイテムにアニメーション表示されます。 1つの問題があります。 チェックボックスをオンにしてもマップが移動しているため、視覚的な効果はありません。 アイデアAndroid MapView:地図がパンニング中にアニメーションが動作しない

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(); 
} 
+0

解決策を見つけることに幸運? – bbodenmiller

答えて

0

同様の問題を解決するためにAsyncTaskを使用しました。ときどき動作しますが、すべてではありません。基本的に私はちょうどいくつかの遅れでanimateToを数回呼び出します。注目すべき価値があると思われるgetMapCenterは、現在の真の中心ではなく、アニメーション化している位置を返します。これを使用して新しい場所に移動したかどうかを検出しようとしましたが、時間がかかりません。また、少なくともICSではアニメーションが1000ミリ秒以上続くことはないので、電話をかけるまで待ってから問題を解決できる可能性があります。