问题以解决 1.复写marker.xml <TextView android:id="@+id/title" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <TextView android:id="@+id/snippet" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <Chronometer android:id="@+id/chronometer" android:layout_width="wrap_content" android:layout_height="wrap_content"></Chronometer> 2.直接建立 inforwindowAdpter接口,重写 getInfoWindow(Marker marker) 完整代码 package com.example.gaodemapsbase; import java.util.Timer; import com.amap.api.location.AMapLocation; import com.amap.api.location.AMapLocationListener; import com.amap.api.location.LocationManagerProxy; import com.amap.api.location.LocationProviderProxy; import com.amap.api.maps2d.AMap; import com.amap.api.maps2d.AMap.OnInfoWindowClickListener; import com.amap.api.maps2d.AMap.OnMarkerClickListener; import com.amap.api.maps2d.CameraUpdateFactory; import com.amap.api.maps2d.LocationSource; import com.amap.api.maps2d.MapView; import com.amap.api.maps2d.AMap.InfoWindowAdapter; import com.amap.api.maps2d.AMap.OnMapLoadedListener; import com.amap.api.maps2d.AMap.OnMarkerDragListener; import com.amap.api.maps2d.model.BitmapDescriptorFactory; import com.amap.api.maps2d.model.LatLng; import com.amap.api.maps2d.model.LatLngBounds; import com.amap.api.maps2d.model.Marker; import com.amap.api.maps2d.model.MarkerOptions; import com.amap.api.maps2d.model.MyLocationStyle; import com.amap.api.maps2d.overlay.WalkRouteOverlay; import com.amap.api.services.core.LatLonPoint; import com.amap.api.services.route.BusRouteResult; import com.amap.api.services.route.DriveRouteResult; import com.amap.api.services.route.RouteSearch; import com.amap.api.services.route.RouteSearch.OnRouteSearchListener; import com.amap.api.services.route.RouteSearch.WalkRouteQuery; import com.amap.api.services.route.WalkPath; import com.amap.api.services.route.WalkRouteResult; import com.amapv1.apis.util.Constants; import android.app.Activity; import android.app.AlertDialog; import android.content.DialogInterface; import android.content.DialogInterface.OnClickListener; import android.location.Location; import android.os.Bundle; import android.os.Handler; import android.os.SystemClock; import android.graphics.Color; import android.text.SpannableString; import android.text.style.ForegroundColorSpan; import android.view.View; import android.widget.Chronometer; import android.widget.Chronometer.OnChronometerTickListener; import android.widget.TextView; public class MainActivity extends Activity implements LocationSource , AMapLocationListener,InfoWindowAdapter, OnMarkerDragListener, OnMapLoadedListener, OnMarkerClickListener, OnInfoWindowClickListener, OnRouteSearchListener,OnClickListener{ private MapView mapView; private AMap aMap; private LatLng latlng = new LatLng(36.061, 103.834);//我的位置 private OnLocationChangedListener mListener; private LocationManagerProxy mAMapLocationManager; private int walkMode = RouteSearch.WalkDefault; private RouteSearch routeSearch; private WalkRouteResult walkRouteResult; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mapView = (MapView) findViewById(R.id.map); mapView.onCreate(savedInstanceState);// 必须要写 init(); } /** * 初始化AMap对象 */ private void init() { if (aMap == null) { aMap = mapView.getMap(); setUpMap(); } routeSearch = new RouteSearch(this); routeSearch.setRouteSearchListener(this); } private void setUpMap() { // TODO Auto-generated method stub MyLocationStyle myLocationStyle = new MyLocationStyle(); myLocationStyle.myLocationIcon(BitmapDescriptorFactory .fromResource(R.drawable.location_marker));// 设置小蓝点的图标 myLocationStyle.strokeColor(Color.BLACK);// 设置圆形的边框颜色 myLocationStyle.radiusFillColor(Color.argb(100, 0, 0, 180));// 设置圆形的填充颜色 // myLocationStyle.anchor(int,int)//设置小蓝点的锚点 myLocationStyle.strokeWidth(1.0f);// 设置圆形的边框粗细 aMap.setMyLocationStyle(myLocationStyle); aMap.setLocationSource(this);// 设置定位监听 aMap.getUiSettings().setMyLocationButtonEnabled(true);// 设置默认定位按钮是否显示 aMap.setMyLocationEnabled(true); aMap.setOnMarkerClickListener( this ); aMap.setOnInfoWindowClickListener(this); aMap.setInfoWindowAdapter(this); aMap.setOnMarkerDragListener(this);// 设置marker可拖拽事件监听器 aMap.setOnMapLoadedListener(this);// aMap.setInfoWindowAdapter(this); addMarkersToMap();// 往地图上添加marker } /** * 在地图上添加marker */ private void addMarkersToMap() { Marker marker00 = aMap.addMarker(new MarkerOptions().anchor(0.5f, 0.5f) .position(new LatLng(30.679879, 104.064855)) .title("成都市") .snippet("成都市:30.679879, 104.064855") .draggable(true)); marker00.showInfoWindow(); drawMarkers();// 添加10个带有系统默认icon的marker } /** * 绘制系统默认的1种marker背景图片 */ public void drawMarkers() { Marker marker = aMap.addMarker(new MarkerOptions() .position(latlng) .title("好好学习") .snippet("天天向上") .draggable(true)); marker.showInfoWindow(); aMap.invalidate();// 刷新地图 } @Override public View getInfoWindow(Marker marker) { View infoWindow = getLayoutInflater().inflate( R.layout.marker, null); render(marker, infoWindow); return infoWindow; } private void render(Marker marker, View view) { String title = marker.getTitle(); TextView titleUi = ((TextView) view.findViewById(R.id.title)); if (title != null) { SpannableString titleText = new SpannableString(title); titleText.setSpan(new ForegroundColorSpan(Color.RED), 0, titleText.length(), 0); titleUi.setTextSize(30); titleUi.setText(titleText); } else { titleUi.setText(""); } String snippet = marker.getSnippet(); TextView snippetUi = ((TextView) view.findViewById(R.id.snippet)); if (snippet != null) { SpannableString snippetText = new SpannableString(snippet); snippetText.setSpan(new ForegroundColorSpan(Color.GREEN), 0, snippetText.length(), 0); snippetUi.setTextSize(15); snippetUi.setText(snippetText); } else { snippetUi.setText(""); } final Chronometer chronometer = (Chronometer)view.findViewById(R.id.chronometer); chronometer.start(); chronometer.setOnChronometerTickListener(new OnChronometerTickListener(){ @Override public void onChronometerTick(Chronometer arg0) { // TODO Auto-generated method stub if (SystemClock.elapsedRealtime() - chronometer.getBase() > 3 * 1000) { chronometer.stop(); // 给用户提示 } } }); } /** * 方法必须重写 */ @Override protected void onResume() { super.onResume(); mapView.onResume(); } /** * 方法必须重写 */ @Override protected void onPause() { super.onPause(); mapView.onPause(); deactivate(); } /** * 方法必须重写 */ @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); mapView.onSaveInstanceState(outState); } /** * 方法必须重写 */ @Override protected void onDestroy() { super.onDestroy(); mapView.onDestroy(); } @Override public void onLocationChanged(AMapLocation amapLocation) { // TODO Auto-generated method stub if(mListener !=null && amapLocation !=null){ mListener.onLocationChanged(amapLocation); //显示系统小蓝点 } } @Override public void onProviderDisabled(String arg0) { // TODO Auto-generated method stub } @Override public void onProviderEnabled(String arg0) { // TODO Auto-generated method stub } @Override public void onStatusChanged(String arg0, int arg1, Bundle arg2) { // TODO Auto-generated method stub } @Override public void activate(OnLocationChangedListener listener) { // TODO Auto-generated method stub mListener = listener; if(mAMapLocationManager == null){ mAMapLocationManager = LocationManagerProxy.getInstance(this); /* * mAMapLocManager.setGpsEnable(false); * 1.0.2版本新增方法,设置true表示混合定位中包含gps定位,false表示纯网络定位,默认是true Location * API定位采用GPS和网络混合定位方式 * ,第一个参数是定位provider,第二个参数时间最短是2000毫秒,第三个参数距离间隔单位是米,第四个参数是定位监听者 */ mAMapLocationManager.requestLocationUpdates( LocationProviderProxy.AMapNetwork,2000,10,this); } } @Override public void deactivate() { // TODO Auto-generated method stub mListener=null; if(mAMapLocationManager !=null){ mAMapLocationManager.removeUpdates(this); mAMapLocationManager.destroy(); } mAMapLocationManager=null; } @Override public void onLocationChanged(Location arg0) { // TODO Auto-generated method stub } @Override public void onMapLoaded() { // 设置所有maker显示在当前可视区域地图中 LatLngBounds bounds = new LatLngBounds.Builder() .include(Constants.XIAN).include(Constants.CHENGDU) .include(latlng).include(Constants.ZHENGZHOU).build(); aMap.moveCamera(CameraUpdateFactory.newLatLngBounds(bounds, 10)); } @Override public void onMarkerDrag(Marker arg0) { // TODO Auto-generated method stub } @Override public void onMarkerDragEnd(Marker arg0) { // TODO Auto-generated method stub } @Override public void onMarkerDragStart(Marker arg0) { // TODO Auto-generated method stub } @Override public View getInfoContents(Marker arg0) { // TODO Auto-generated method stub return null; } @Override public boolean onMarkerClick(Marker arg0) { // TODO Auto-generated method stub arg0.showInfoWindow(); return true; } @Override public void onInfoWindowClick(Marker arg0) { // TODO Auto-generated method stub LatLonPoint startPoint = new LatLonPoint(36.121,103.844); LatLonPoint endPoint = new LatLonPoint(36.061, 103.834); searchRouteResult(startPoint , endPoint); } /** * 开始搜索路径规划方案 */ public void searchRouteResult(LatLonPoint startPoint, LatLonPoint endPoint) { final RouteSearch.FromAndTo fromAndTo = new RouteSearch.FromAndTo( startPoint, endPoint); WalkRouteQuery query = new WalkRouteQuery(fromAndTo, walkMode); routeSearch.calculateWalkRouteAsyn(query);// 异步路径规划步行模式查询 } @Override public void onBusRouteSearched(BusRouteResult arg0, int arg1) { // TODO Auto-generated method stub } @Override public void onDriveRouteSearched(DriveRouteResult arg0, int arg1) { // TODO Auto-generated method stub } @Override public void onWalkRouteSearched(WalkRouteResult result, int rCode) { // TODO Auto-generated method stub // 路径规划中步行模式 if(rCode == 0){ if(result != null && result.getPaths() != null && result.getPaths().size() > 0){ walkRouteResult = result; WalkPath walkPath = walkRouteResult.getPaths().get(0); aMap.clear();//清理之前的图标 WalkRouteOverlay walkRouteOverlay = new WalkRouteOverlay( this, aMap, walkPath,walkRouteResult.getStartPos(), walkRouteResult.getTargetPos()); walkRouteOverlay.removeFromMap(); walkRouteOverlay.addToMap(); walkRouteOverlay.zoomToSpan(); } } } @Override public void onClick(DialogInterface arg0, int arg1) { // TODO Auto-generated method stub } }
问题以解决
1.复写marker.xml
2.直接建立 inforwindowAdpter接口,重写 getInfoWindow(Marker marker)
完整代码
package com.example.gaodemapsbase;
import java.util.Timer;
import com.amap.api.location.AMapLocation;
import com.amap.api.location.AMapLocationListener;
import com.amap.api.location.LocationManagerProxy;
import com.amap.api.location.LocationProviderProxy;
import com.amap.api.maps2d.AMap;
import com.amap.api.maps2d.AMap.OnInfoWindowClickListener;
import com.amap.api.maps2d.AMap.OnMarkerClickListener;
import com.amap.api.maps2d.CameraUpdateFactory;
import com.amap.api.maps2d.LocationSource;
import com.amap.api.maps2d.MapView;
import com.amap.api.maps2d.AMap.InfoWindowAdapter;
import com.amap.api.maps2d.AMap.OnMapLoadedListener;
import com.amap.api.maps2d.AMap.OnMarkerDragListener;
import com.amap.api.maps2d.model.BitmapDescriptorFactory;
import com.amap.api.maps2d.model.LatLng;
import com.amap.api.maps2d.model.LatLngBounds;
import com.amap.api.maps2d.model.Marker;
import com.amap.api.maps2d.model.MarkerOptions;
import com.amap.api.maps2d.model.MyLocationStyle;
import com.amap.api.maps2d.overlay.WalkRouteOverlay;
import com.amap.api.services.core.LatLonPoint;
import com.amap.api.services.route.BusRouteResult;
import com.amap.api.services.route.DriveRouteResult;
import com.amap.api.services.route.RouteSearch;
import com.amap.api.services.route.RouteSearch.OnRouteSearchListener;
import com.amap.api.services.route.RouteSearch.WalkRouteQuery;
import com.amap.api.services.route.WalkPath;
import com.amap.api.services.route.WalkRouteResult;
import com.amapv1.apis.util.Constants;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.location.Location;
import android.os.Bundle;
import android.os.Handler;
import android.os.SystemClock;
import android.graphics.Color;
import android.text.SpannableString;
import android.text.style.ForegroundColorSpan;
import android.view.View;
import android.widget.Chronometer;
import android.widget.Chronometer.OnChronometerTickListener;
import android.widget.TextView;
public class MainActivity extends Activity implements LocationSource
, AMapLocationListener,InfoWindowAdapter, OnMarkerDragListener, OnMapLoadedListener,
OnMarkerClickListener, OnInfoWindowClickListener, OnRouteSearchListener,OnClickListener{
}
}