百度sdk 更改了,现在监听事件里面有了MKMapTouchListener 包括单击长按事件了, 建议去看百度的sdk demo,比较简单

弹气泡现在好像也有PopupOverlay

------ 以下内容不建议看 2014年1月6日17:50:43

这个demo中 一个是长按的overlay, 一个对所有点画连线的overlay.

只是简单的弄出效果,具体需要什么样,就得看各自的需求 改动了

demo下载链接在下面

Main

package com.zeng.map_drawline;import java.util.ArrayList;import android.graphics.drawable.Drawable;import android.os.Bundle;import android.view.View;import com.baidu.mapapi.BMapManager;import com.baidu.mapapi.GeoPoint;import com.baidu.mapapi.MapActivity;import com.baidu.mapapi.MapView;public class Main extends MapActivity {private ArrayList<GeoPoint> point;// 模拟点MapAPP app;private MapView mapView;private Drawable marker;View popView;void initGeoPoint() {point = new ArrayList<GeoPoint>();point.add(new GeoPoint((int) (40.035172 * 1E6), (int) (116.304741 * 1E6)));point.add(new GeoPoint((int) (39.966579 * 1E6), (int) (116.347313 * 1E6)));point.add(new GeoPoint((int) (39.939384 * 1E6), (int) (116.349915 * 1E6)));point.add(new GeoPoint((int) (39.935928 * 1E6), (int) (116.314636 * 1E6)));point.add(new GeoPoint((int) (39.941044 * 1E6), (int) (116.303902 * 1E6)));point.add(new GeoPoint((int) (39.983204 * 1E6), (int) (116.309509 * 1E6)));}@Overrideprotected void onCreate(Bundle arg0) {// TODO Auto-generated method stubsuper.onCreate(arg0);app = (MapAPP) this.getApplication();setContentView(R.layout.main);if (app.mBMapMan == null) {app.mBMapMan = new BMapManager(this);app.mBMapMan.init(app.mStrKey, new MapAPP.MyGeneralListener());}app.mBMapMan.start();super.initMapActivity(app.mBMapMan);initGeoPoint();mapView = (MapView) findViewById(R.id.bmapView);mapView.setBuiltInZoomControls(true);mapView.setDrawOverlayWhenZooming(true);marker = getResources().getDrawable(R.drawable.iconmarka);OverItemT overitem = new OverItemT(this, marker, point);mapView.getOverlays().add(overitem);mapView.getController().animateTo(point.get(0));// 添加长按overlayLongClickOverlay ov = new LongClickOverlay(this);mapView.getOverlays().add(ov);mapView.invalidate();//popView = getLayoutInflater().inflate(R.layout.popview, null);mapView.addView(popView, new MapView.LayoutParams(MapView.LayoutParams.WRAP_CONTENT,MapView.LayoutParams.WRAP_CONTENT, null, MapView.LayoutParams.BOTTOM_CENTER));popView.setVisibility(View.GONE);}@Overrideprotected boolean isRouteDisplayed() {// TODO Auto-generated method stubreturn false;}public void showPopupWindow(int x, int y) {GeoPoint p = mapView.getProjection().fromPixels(x, y);MapView.LayoutParams geoLP = (MapView.LayoutParams) popView.getLayoutParams();geoLP.point = p;mapView.updateViewLayout(popView, geoLP);popView.setVisibility(View.VISIBLE);mapView.invalidate();}}

LongClickOverlay

package com.zeng.map_drawline;import java.util.ArrayList;import java.util.List;import android.content.Context;import android.graphics.Canvas;import android.graphics.Point;import android.view.GestureDetector;import android.view.GestureDetector.OnDoubleTapListener;import android.view.GestureDetector.OnGestureListener;import android.view.MotionEvent;import com.baidu.mapapi.GeoPoint;import com.baidu.mapapi.ItemizedOverlay;import com.baidu.mapapi.MapController;import com.baidu.mapapi.MapView;import com.baidu.mapapi.Overlay;import com.baidu.mapapi.OverlayItem;import com.baidu.mapapi.Projection;/** * 继承ItemizedOverlay<OverlayItem> 或是Overlay,看情况了 *  * 这个 只能弄出长按的效果, 若是说 地图上很多确定的点,点击某一个 弹出对应的东西,那就不好判断是哪一个点了。 不知道新的api是否有增加 *  * @author zeng *  */public class LongClickOverlay extends Overlay implements OnDoubleTapListener, OnGestureListener {private GestureDetector gestureScanner = new GestureDetector(this);public static final int LONGPRESSINTERVAL = 1000;private Context mContext;float x = 0;float y = 0;// down - up 毫秒值protected long time;// 是否longpressprotected boolean isLongPress = false;public LongClickOverlay(Context context) {this.mContext = context;}@Overridepublic void draw(Canvas canvas, MapView mapView, boolean arg2) {// TODO Auto-generated method stubsuper.draw(canvas, mapView, arg2);}@Overridepublic boolean onTouchEvent(MotionEvent arg0, MapView mapView) {x = arg0.getX();y = arg0.getY();switch (arg0.getAction()) {case MotionEvent.ACTION_DOWN:time = System.currentTimeMillis();isLongPress = false;break;case MotionEvent.ACTION_UP:if (System.currentTimeMillis() - time > LONGPRESSINTERVAL) {isLongPress = true;}break;default:break;}return gestureScanner.onTouchEvent(arg0);}@Overridepublic void onLongPress(MotionEvent e) {x = e.getX();y = e.getY();if (mContext instanceof Main) {((Main) mContext).showPopupWindow((int) x, (int) y);}isLongPress = false;}@Overridepublic boolean onTap(GeoPoint arg0, MapView mapView) {if (!isLongPress)return super.onTap(arg0, mapView);return true;}@Overridepublic boolean onDown(MotionEvent e) {// TODO Auto-generated method stubreturn false;}@Overridepublic void onShowPress(MotionEvent e) {// TODO Auto-generated method stub}@Overridepublic boolean onSingleTapUp(MotionEvent e) {// TODO Auto-generated method stubreturn false;}@Overridepublic boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {// TODO Auto-generated method stubreturn false;}@Overridepublic boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {// TODO Auto-generated method stubreturn false;}@Overridepublic boolean onSingleTapConfirmed(MotionEvent e) {// TODO Auto-generated method stubreturn false;}@Overridepublic boolean onDoubleTap(MotionEvent e) {// TODO Auto-generated method stubreturn false;}@Overridepublic boolean onDoubleTapEvent(MotionEvent e) {// TODO Auto-generated method stubreturn false;}}

连线

package com.zeng.map_drawline;import java.util.ArrayList;import java.util.List;import android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.graphics.Point;import android.graphics.drawable.Drawable;import com.baidu.mapapi.GeoPoint;import com.baidu.mapapi.ItemizedOverlay;import com.baidu.mapapi.MapView;import com.baidu.mapapi.OverlayItem;import com.baidu.mapapi.Projection;/** *  图上各点画连线 * @author zeng * */public class OverItemT extends ItemizedOverlay<OverlayItem> {protected List<OverlayItem> mGeoList = new ArrayList<OverlayItem>();protected Drawable marker;protected Drawable roughMarker;protected Context mContext;protected MapView mapView;private ArrayList<GeoPoint> geoPoints;private float[] pts;public OverItemT(Context context, Drawable marker, ArrayList<GeoPoint> point) {// TODO Auto-generated constructor stubsuper(boundCenter(marker));this.mContext = context;this.marker = marker;this.geoPoints = point;for (int i = 0; i < point.size(); i++) {mGeoList.add(new OverlayItem(point.get(i), "", ""));}pts = new float[point.size() * 2];populate();}private ArrayList<Point> pt;public void draw(Canvas canvas, MapView mapView, boolean arg2) {super.draw(canvas, mapView, arg2);Projection projection = mapView.getProjection();pt = new ArrayList<Point>();for (int index = 0; index < size(); index++) {OverlayItem overLayItem = getItem(index);String title = overLayItem.getTitle();Point point = projection.toPixels(overLayItem.getPoint(), null);Paint paintText = new Paint();paintText.setColor(Color.BLUE);float width = paintText.measureText(title);canvas.drawText(title, point.x - width / 2, point.y + 30, paintText);// for( int k = 0; k<size(); k++){// projection.toPixels(, arg1)// }// for(int j = 0; j<size()-1;j++){// canvas.drawLines(pts, paint)// canvas.drawLines(pts, offset, count, paint)// }// projection.toPixels(geoPoints.get(index), pt.get(index));pt.add(point);}int pts_index = 0;for (int i = 0; i < pt.size(); i++) {pts[pts_index] = pt.get(i).x;pts_index++;pts[pts_index] = pt.get(i).y;pts_index++;}Paint linePaint = new Paint();//canvas.drawLines(pts, linePaint);for( int i = 0; i<pt.size();i++){if(i+1< pt.size())drawLine(canvas, pt.get(i), pt.get(i+1), linePaint);}}private void drawLine(Canvas canvas,Point p1,Point p2,Paint p){canvas.drawLine(p1.x, p1.y, p2.x, p2.y, p);}@Overrideprotected OverlayItem createItem(int i) {// TODO Auto-generated method stubreturn mGeoList.get(i);}@Overridepublic int size() {// TODO Auto-generated method stubreturn mGeoList.size();}}



// 弹出窗口popView = getLayoutInflater().inflate(R.layout.popview, null);mapView.addView(popView, new MapView.LayoutParams(MapView.LayoutParams.WRAP_CONTENT,MapView.LayoutParams.WRAP_CONTENT, null, MapView.LayoutParams.BOTTOM_CENTER));popView.setVisibility(View.GONE);public void ShowPopuWindow(int x ,int y){GeoPoint p =mapView.getProjection().fromPixels(x, y);MapView.LayoutParams geoLP = (MapView.LayoutParams) popView.getLayoutParams();geoLP.point = p;mapView.updateViewLayout(popView, geoLP);popView.setVisibility(View.VISIBLE);mapView.invalidate();}




demo下载点击打开链接


http://download.csdn.net/detail/zgf1991/4504043



更多相关文章

  1. Android(安卓)ApiDemos示例解析(98):Views->Animation->Shake
  2. 【Android】 桌面图标右上角显示数字(角标)
  3. GitHub上受欢迎的Android(安卓)UI Library
  4. Android(安卓)实现RippleEffect水波纹效果
  5. 开发技术前线 第六期
  6. android 水下气泡上升界面效果
  7. Android(安卓)UI控件之Gallery实现循环效果总结
  8. Android(安卓)开发笔记 动画效果 --Animation 动画专题研究(xml)
  9. Android的Activity滑动切换动画

随机推荐

  1. Android系列教程之六:TextView小组件的使
  2. Android大图片背景性能优化篇
  3. Android(安卓)Metro风格的Launcher开发系
  4. 【移动开发】Android中Theme和Style的使
  5. Android(安卓)FastJson与不规范JSON引发
  6. 2011年Android手机用户购买行为研究报告
  7. Android布局优化之ViewStub(三)
  8. Android(安卓)Hierarchy Viewer
  9. Android——自定义View类(一 )
  10. Android打开APP会有权限询问