首页 > android 如何自定义marker添加时间

android 如何自定义marker添加时间

infowindow加计时器。


问题以解决

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

}

}

【热门文章】
【热门文章】