27

Android Maps V2 が「現在地」に使用するデフォルトのアイコンを独自の画像に置き換えたいと考えています。私は独自のタイル プロバイダーを作成しました。このマップは主に青色で、デフォルトの [現在地] アイコンである小さな青い矢印は非常に見にくいものです。

以前は の draw メソッドをオーバーライドしただけでしたMyLocationOverlayが、新しい API にはそれがないようです。

また、向きに応じて矢印が回転するのと同じように、アイコンを回転できるようにする必要もあります。なので、普通のマーカーしか使えません。基本的には、その矢印のカスタム イメージを作成するだけです。

4

6 に答える 6

30

私の簡単な解決方法は、Googleマップの「現在地」を無効にすることです

私のアイコンでマップ上にImageViewを作成し、次にImageViewをキャプチャします

onClick と getMyLocation 、 onClick の animateCamera

 this.mGoogleMap.getUiSettings().setMyLocationButtonEnabled(false);
 this.mGoogleMap.setMyLocationEnabled(true);

.

@Override
public void onClick(final View v) {

    Location location = this.mGoogleMap.getMyLocation();

        if (location != null) {

            LatLng target = new LatLng(location.getLatitude(), location.getLongitude());
            CameraPosition position = this.mGoogleMap.getCameraPosition();

            Builder builder = new CameraPosition.Builder();
            builder.zoom(15);
            builder.target(target);

            this.mGoogleMap.animateCamera(CameraUpdateFactory.newCameraPosition(builder.build()));

          }    
}
于 2013-02-12T06:07:20.447 に答える
26

Google Play Services の最新のアップデートにより、「フラット」マーカーを使用して回転できるようになりました。これはまさに私が必要としていたものです。これは、私が実装した方法の簡単なバージョンです。アニメーションを最適化し微調整するためにできることはおそらくかなりありますが、今のところはうまくいきます。どんなフィードバックでも大歓迎です。

Marker mPositionMarker;
GoogleMap mMap;

@Override
public void onLocationChanged(Location location) {

    if (location == null)
        return;

    if (mPositionMarker == null) {

        mPositionMarker = mMap.addMarker(new MarkerOptions()
                .flat(true)
                .icon(BitmapDescriptorFactory
                        .fromResource(R.drawable.positionIndicator))
                .anchor(0.5f, 0.5f)
                .position(
                        new LatLng(location.getLatitude(), location
                                .getLongitude())));
    }

    animateMarker(mPositionMarker, location); // Helper method for smooth
                                                // animation

    mMap.animateCamera(CameraUpdateFactory.newLatLng(new LatLng(location
            .getLatitude(), location.getLongitude())));

}

public void animateMarker(final Marker marker, final Location location) {
    final Handler handler = new Handler();
    final long start = SystemClock.uptimeMillis();
    final LatLng startLatLng = marker.getPosition();
    final double startRotation = marker.getRotation();
    final long duration = 500;

    final Interpolator interpolator = new LinearInterpolator();

    handler.post(new Runnable() {
        @Override
        public void run() {
            long elapsed = SystemClock.uptimeMillis() - start;
            float t = interpolator.getInterpolation((float) elapsed
                    / duration);

            double lng = t * location.getLongitude() + (1 - t)
                    * startLatLng.longitude;
            double lat = t * location.getLatitude() + (1 - t)
                    * startLatLng.latitude;

            float rotation = (float) (t * location.getBearing() + (1 - t)
                    * startRotation);

            marker.setPosition(new LatLng(lat, lng));
            marker.setRotation(rotation);

            if (t < 1.0) {
                // Post again 16ms later.
                handler.postDelayed(this, 16);
            }
        }
    });
}
于 2013-10-29T06:50:41.930 に答える
4

3.1.36現在、アイコンの変更はできません(今後変更されると思いますが、API v2の改善実装の速さを見るとクリスマス前にはなりません)。

ただし、機能があるため、マーカーを使用できるようになりましたsetIcon

GoogleMap.setMyLocationEnabledは常に上に表示されるため、基本的に忘れる必要があります。代わりに独自のものを作成し、LocationClient緯度、経度、方位を使用しLocationて を更新しMarkerます。さらに、 を追加し、Circle精度を使用して、デフォルトの myLocation ビジュアライゼーションと同様の効果を実現します。

于 2013-05-31T12:12:05.983 に答える
0

これを試して; 地図上にルートを描くためにこれを使用しますが、マーカーと自分の場所のアイコンを設定します あなたの場所を表示するためにこれを宣言します:

    LocationManager locationManager = (LocationManager) 
    getSystemService(LOCATION_SERVICE);
    Criteria criteria = new Criteria();
    String provider = locationManager.getBestProvider(criteria, true);
    Location myLocation= locationManager.getLastKnownLocation(provider);

    longitude = myLocation.getLongitude();
    latitude  = myLocation.getLatitude();
    fromPosition = new LatLng(latitude, longitude);

そして、そのような関数を作成します。私は地図上に描画するために使用しましたが、マーカーと自分の位置にアイコンを設定しました:

mGoogleMap.clear();
if(response.equalsIgnoreCase("Success"))
{
     ArrayList<LatLng> directionPoint = v2GetRouteDirection.getDirection(document);
     PolylineOptions rectLine = new PolylineOptions().width(7).color(Color.BLUE);

     for (int i = 0; i < directionPoint.size(); i++) {
     rectLine.add(directionPoint.get(i));
     }
     // Adding route on the map
     mGoogleMap.setOnMarkerClickListener(MainActivity.this);
     mGoogleMap.addPolyline(rectLine);
     markerOptions.position(fromPosition);
     markerOptions.draggable(true);
     Marker1 = mGoogleMap.addMarker(new MarkerOptions()
               .position(Estadio)
               .title("Estadio Cuscatlan")
               .snippet("Estadio Cuscatlan")                                                    
               .icon(BitmapDescriptorFactory                                          
               .fromResource(R.drawable.mapmarker))); 
     Marker2 = mGoogleMap.addMarker(new MarkerOptions()
               .position(Metrocentro)
           .title("Metrocentro")
           .snippet("Metrosuelo")
           .icon(BitmapDescriptorFactory
           .fromResource(R.drawable.mapmark
      Marker3 = mGoogleMap.addMarker(new MarkerOptions()
            .position(Mejicanos)
            .title("Mejicanos")
            .snippet("Mejicanos")
            .icon(BitmapDescriptorFactory
            .fromResource(R.drawable.mapmarker)));  
      MarkerMe = mGoogleMap.addMarker(new MarkerOptions()                                             
                        .position(fromPosition) 
                        .icon(BitmapDescriptorFactory
                        .fromResource(R.drawable.car64)));
   }
    Dialog.dismiss();
    } 
} 
于 2013-09-27T21:00:30.763 に答える