Android为marker添加点击事件,android 如何自定义marker添加时间

问题以解决

1.复写marker.xml

android:id="@+id/title"

android:layout_width="wrap_content"

android:layout_height="wrap_content" />

android:id="@+id/snippet"

android:layout_width="wrap_content"

android:layout_height="wrap_content" />

android:id="@+id/chronometer"

android:layout_width="wrap_content"

android:layout_height="wrap_content">

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

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值