android 百度地图 三、气泡显示
来源:互联网 发布:linux内网端口转发工具 编辑:程序博客网 时间:2024/04/30 04:46
一个小例子,在地图中显示一个浮标,显示出我们的标记点,点击这个浮标会出现一个文本显示的气泡
先来看看效果:
public class MainActivity extends MapActivity {
BMapManager mBMapMan;
MapController mMapController;
MKOfflineMap mOffline = null; //申明变量 离线地图
static View mPopView = null; // 点击mark时弹出的气泡View
MyOverItemT overitem = null;
MapView mMapView;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
GeoPoint point = new GeoPoint((int) ( 22.560034 * 1E6),(int) (113.940657 * 1E6));
List<GeoPoint> lgp=new ArrayList<GeoPoint>();
lgp.add(point);
//BMapManager的注册和初始化
mBMapMan = new BMapManager(getApplication());
mBMapMan.init("3B388F2271D0255A779274772B906055B2942035", null);
mBMapMan.start();
super.initMapActivity(mBMapMan);
//mapview地图控件的设置
mMapView = (MapView) findViewById(R.id.bmapsView);
mMapView.setBuiltInZoomControls(true); //
mMapView.setDrawOverlayWhenZooming(true);//在地图缩放的过程里绘制
mMapView.getController().setCenter(point);//将指定点作为地图的中心显示出来
//标记
Drawable marker = getResources().getDrawable(R.drawable.iconmarka);
//为maker定义位置和边界
marker.setBounds(0, 0, marker.getIntrinsicWidth(), marker.getIntrinsicHeight());
//这是在点击了标记之后,弹出的浮动窗口
mPopView=super.getLayoutInflater().inflate(R.layout.popview, null);
mMapView.addView( mPopView,
new MapView.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT,
null, MapView.LayoutParams.TOP_LEFT));
mPopView.setVisibility(View.GONE);
overitem=new MyOverItemT(marker,this,lgp);
mMapView.getOverlays().add(overitem);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
@Override
protected void onDestroy() {
if (mBMapMan != null) {
mBMapMan.destroy();
mBMapMan = null;
}
super.onDestroy();
}
@Override
protected void onPause() {
if (mBMapMan != null) {
mBMapMan.stop();
}
super.onPause();
}
@Override
protected void onResume() {
if (mBMapMan != null) {
mBMapMan.start();
}
super.onResume();
}@Override
protected boolean isRouteDisplayed() {
// TODO Auto-generated method stub
return false;
}
}
自定义图层类:
class MyOverItemT extends ItemizedOverlay<OverlayItem> {
public List<OverlayItem> mGeoList = new ArrayList<OverlayItem>();
private Drawable marker;//标记
private MainActivity ma;//上下文
public List<GeoPoint> gpl = new ArrayList<GeoPoint>();
Projection projection;
//初始化,生成图层的item。
public MyOverItemT(Drawable marker, MainActivity context, List<GeoPoint> gplist) {
super(boundCenterBottom(marker));
this.marker=marker;
this.ma=context;
//根据gplist来制作OverlayItem
for(int i=0;i<gplist.size();i++){
GeoPoint gp=(GeoPoint)gplist.get(i);
OverlayItem ot=new OverlayItem(gp,"gp"+i,"gpoint"+i);
mGeoList.add(ot);
}
populate();//更新
}
//核心的方法 1 draw:将图层上的item绘制出来 2 onTap:触发每个item的时候响应动作
@Override
public void draw(Canvas canvas, MapView mapView, boolean shadow) {
//将List<OverlayItem> mGeoList 全部绘制出来
// Projection接口用于屏幕像素坐标和经纬度坐标之间的变换
projection = mapView.getProjection();
//得到OverlayItem,然后转换成point点
//然后根据这个点绘制
for (int index = size() - 1; index >= 0; index--) {
OverlayItem overLayItem = getItem(index);
String title = overLayItem.getTitle();
Point point = projection.toPixels(overLayItem.getPoint(), null);
Paint paintText = new Paint();
paintText.setColor(Color.RED);
paintText.setTextSize(15);
canvas.drawText(title, point.x-30, point.y, paintText); // 绘制文本
}
super.draw(canvas, mapView, shadow);
boundCenterBottom(marker);
}
@Override
public boolean onTap(GeoPoint arg0, MapView arg1) {
//浮标消失
ma.mPopView.setVisibility(View.GONE);
return super.onTap(arg0, arg1);
}
@Override
protected boolean onTap(int i) {
//首先 某一个item获得焦点
//然后将标记图标的view 加入到mapview中
setFocus(mGeoList.get(i));
GeoPoint pt = mGeoList.get(i).getPoint();
Point pn=projection.toPixels(pt, null);
ma.mMapView.updateViewLayout( ma.mPopView,
new MapView.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT,
pt, MapView.LayoutParams.BOTTOM_CENTER));
ma.mPopView.setVisibility(View.VISIBLE);
//得到坐标然后显示出来
TextView tv1=(TextView)ma.mMapView.findViewById(R.id.tv1);
tv1.setText("经纬度:"+pt.getLongitudeE6()/1e6+","+pt.getLatitudeE6()/1e6);
TextView tv2=(TextView)ma.mMapView.findViewById(R.id.tv2);
tv2.setText("坐标:"+pn.x+","+pn.y);
return true;
}
@Override
protected OverlayItem createItem(int arg0) {
// TODO Auto-generated method stub
return mGeoList.get(arg0);
}@Override
public int size() {
// TODO Auto-generated method stub
return mGeoList.size();
}
}图标的布局样式:<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="horizontal"
android:paddingBottom="25dip" ><LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/pop"
android:orientation="vertical" ><TextView
android:id="@+id/tv1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="坐标" /><TextView
android:id="@+id/tv2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="x,y" />
</LinearLayout></LinearLayout>
- android 百度地图 三、气泡显示
- Android 百度地图API-----气泡显示
- Android 百度地图API学习(五)-----气泡显示
- android百度定位后显示在地图上点击弹出气泡
- android百度定位后显示在地图上点击弹出气泡
- Android-高德地图-显示气泡框
- 百度地图自定义气泡
- 百度地图自定义气泡
- Android百度地图显示
- android 百度地图长按弹出气泡 popupWindow
- android版百度地图 自定义 点击当前位置弹出气泡
- Android开发资源分享----实现百度地图复杂气泡实例
- android版百度地图 自定义 点击当前位置弹出气泡
- android版百度地图 自定义 点击当前位置弹出气泡
- 百度地图上的气泡
- Android百度地图显示POI
- Android百度地图之显示地图
- android-百度地图-手机显示地图
- 计算机组成实验-第3章-Datapath基本组件设计
- javascript循环性能大比拼
- 1114 Piggy-Bank - 完全背包 恰好达到状态最小价值
- 计算机组成实验-第4章_ALU与ALU控制器设计实验
- Android中资源文件夹res/raw和assets的使用
- android 百度地图 三、气泡显示
- 手把手教你把Vim改装成一个IDE编程环境(图文)(转)
- HTTP 1.1状态代码及其含义
- A replacement for MaskBlt
- MySQL计划任务(事件调度器)(Event Scheduler)
- 在spring中配置jdbcTemplate和hibernateTemplate
- concurrenthashmap
- 获取手机sim卡信息
- C# 屏幕监控 自动截屏程序 主窗体隐藏,仅在进程中显示