|
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
覆盖物的实现
覆盖物
如标注、矢量图形元素(包括:折线和多边形和圆)、定位图标等。覆盖物拥有自己的地理坐标,当您拖动或缩放地图时,它们会相应的处理。
覆盖物包括: - package huaxa.it.map;
- import java.util.List;
- import com.baidu.mapapi.map.Geometry;
- import com.baidu.mapapi.map.Graphic;
- import com.baidu.mapapi.map.GraphicsOverlay;
- import com.baidu.mapapi.map.Overlay;
- import com.baidu.mapapi.map.Symbol;
- import android.R.color;
- import android.R.drawable;
- import android.os.Bundle;
- /**
- * @项目名: BaiduMap
- * @包名: huaxa.it.map
- * @类名: GraphicsOverlayDemo
- * @创建者: 黄夏莲
- * @创建时间: 2016年12月1日 ,下午6:13:46
- *
- * @描述: TODO
- */
- public class GraphicsOverlayDemo extends BaseActivity
- {
- @Override
- protected void onCreate(Bundle savedInstanceState)
- {
- // TODO Auto-generated method stub
- super.onCreate(savedInstanceState);
- draw();
- }
- /**
- * 绘制几何图形
- */
- private void draw()
- {
- // 覆盖物操作
- // ①获取存放覆盖物的集合(MapView)
- List<Overlay> overlays = mapView.getOverlays();
- // ②创建自己的overlays信息添加集合中
- GraphicsOverlay overlay = new GraphicsOverlay(mapView);
- // 关于几何图形设置
- setData(overlay);
- overlays.add(overlay);
- // ③刷新mapView的显示内容
- mapView.refresh();
- }
- /**
- * 几何图形设置
- *
- * @param overlay
- */
- private void setData(GraphicsOverlay overlay)
- {
- // 绘制圆
- /**
- * setCircle(GeoPoint geoPoint, int radius) 设置图形为圆 参数: geoPoint地理坐标
- * radius圆的半径,单位:米
- */
- // 几何元素的定义
- // 圆心+半径
- Geometry geometry = new Geometry();
- geometry.setCircle(geoPoint, 1000);
- // 样式
- // 颜色+是否填充+如果不填充,绘制圆的线条的粗细
- Symbol symbol = new Symbol();
- /**
- * setSurface
- *
- * public void setSurface(Symbol.Color color, int status, int linewidth)
- * 设置面样式 参数: color - 颜色 status - 填充状态,0表示不填充,1表示填充 linewidth -
- * 线宽,当填充状态为填充时线宽无意义
- */
- Symbol.Color color = symbol.new Color();
- //指定三色
- color.red = 255;
- color.green = 0;
- color.blue = 0;
- color.alpha = 100;
- symbol.setSurface(color, 1, 0);
- Graphic graphic = new Graphic(geometry, symbol);
- overlay.setData(graphic);
- }
- }
复制代码
再设置Manifest.xml的内容即可。 2、实现目的:在底图上画一个文本图形(覆盖物)
使用到TextOverlay类,其中用到TextItem对文本进行设置。
实现效果:
TextOverlayDemo.java
3、实现目的:在底图上画一个多条目(覆盖物,如图标)
实现过程:使用到ItemizedOverlay类
ItemizedOverlay(
getResources().getDrawable(R.drawable.eat_icon), mapView);//第一个参数就是图片,第二个参数是mapView。
接着对OverlayItem进行设置,然后添加到itemizedOverlay里面就可以了。另外,可以设置多个条目,直接设置具体坐标,并添加到itemizedOverlay里面。
实现效果
ItemizedOverlayDemo.java
- package huaxa.it.map;
- import java.util.List;
- import android.os.Bundle;
- import com.baidu.mapapi.map.ItemizedOverlay;
- import com.baidu.mapapi.map.Overlay;
- import com.baidu.mapapi.map.OverlayItem;
- import com.baidu.platform.comapi.basestruct.GeoPoint;
- /**
- * @项目名: BaiduMap
- * @包名: huaxa.it.map
- * @类名: ItemizedOverlayDemo
- * @创建者: 黄夏莲
- * @创建时间: 2016年12月2日 ,上午9:14:17
- *
- * @描述: 多条目覆盖物
- */
- public class ItemizedOverlayDemo extends BaseActivity
- {
- @Override
- protected void onCreate(Bundle savedInstanceState)
- {
- // TODO Auto-generated method stub
- super.onCreate(savedInstanceState);
- controller.setZoom(16);
- draw();
- }
- /**
- * 绘制文本图形
- */
- private void draw()
- {
- // 覆盖物操作
- // ①获取存放覆盖物的集合(MapView)
- List<Overlay> overlays = mapView.getOverlays();
- // ②创建自己的overlays信息添加集合中
- ItemizedOverlay<OverlayItem> overlay = new ItemizedOverlay<OverlayItem>(
- getResources().getDrawable(R.drawable.eat_icon), mapView);
- setData(overlay);
- overlays.add(overlay);
- // ③刷新mapView
- mapView.refresh();
- }
- // 设置多条目数据
- private void setData(ItemizedOverlay<OverlayItem> overlay)
- {
- // OverlayItem(GeoPoint point, String title, String snippet)
- // protected GeoPoint mPoint
- // 该item的位置
- // protected String mTitle
- // 该item的标题文本
- // protected String mSnippet
- // 该item的文字片段
- String mSnippet = "该学校是由……";
- OverlayItem Item = new OverlayItem(geoPoint, "广东工业大学", mSnippet);
- overlay.addItem(Item);
- Item = new OverlayItem(new GeoPoint(latitude, longitude+1000), "向东", "增加经度");
- overlay.addItem(Item);
- Item = new OverlayItem(new GeoPoint(latitude, longitude-1000), "向西", "减少经度");
- overlay.addItem(Item);
- Item = new OverlayItem(new GeoPoint(latitude+1000, longitude-1000), "向西北", "增加纬度,减少经度");
- overlay.addItem(Item);
- }
- }
复制代码
4、实现目的:对上面的多条目进行泡泡显示
实现过程:1、实现布局pop.xml;2、实现popView的初始化操作,设置popView不可见,并把popView添加到mapView里面。3、通过onTap()方法实现点击事件,需要更新mapView(当点击一个Item时,会弹出一个pop窗口),通过mapView.updateViewLayout(popView, params);更新View,而params里面需要设置pop窗口的位置,所以需要先重新定义params;再设置pop窗口可见,进而设置pop窗口的显示内容。注意:如果没有将popView中的TextView在此处实例化,会报空指针异常。
实现效果:
pop.xml - <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:id="@+id/user_info"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginBottom="20dip"
- android:layout_weight="1"
- android:background="@drawable/popupmap"
- android:gravity="center_vertical"
- android:orientation="horizontal" >
- <ImageView
- android:id="@+id/round"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginBottom="2dip"
- android:src="@drawable/round" />
- <TextView
- android:id="@+id/title"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:ellipsize="end"
- android:text="标题"
- android:textSize="20sp" />
- <ImageView
- android:id="@+id/roads"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:src="@drawable/roads" />
- </LinearLayout>
复制代码
修改java文件为:
- package huaxa.it.map;
- import java.util.List;
- import android.os.Bundle;
- import android.view.View;
- import android.view.ViewGroup.LayoutParams;
- import android.widget.TextView;
- import com.baidu.mapapi.map.ItemizedOverlay;
- import com.baidu.mapapi.map.MapView;
- import com.baidu.mapapi.map.Overlay;
- import com.baidu.mapapi.map.OverlayItem;
- import com.baidu.platform.comapi.basestruct.GeoPoint;
- /**
- * @项目名: BaiduMap
- * @包名: huaxa.it.map
- * @类名: ItemizedOverlayDemo
- * @创建者: 黄夏莲
- * @创建时间: 2016年12月2日 ,上午9:14:17
- *
- * @描述: 多条目覆盖物
- */
- public class ItemizedOverlayDemo extends BaseActivity
- {
- private TextView title;
- private View popView;
- private OverlayItem Item;
- @Override
- protected void onCreate(Bundle savedInstanceState)
- {
- // TODO Auto-generated method stub
- super.onCreate(savedInstanceState);
- controller.setZoom(17);
- initPop();
- draw();
- }
- // 添加泡泡
- // 点击某个具体的item的时候在其上方显示
- // 加载pop
- // 添加到mapview中,不用设置坐标,pop隐藏
- // 当点击时,显示泡泡,位置更新
- private void initPop()
- {
- // 初始化popView并且设置相应参数
- popView = View.inflate(getApplicationContext(), R.layout.pop, null);
- MapView.LayoutParams params = new MapView.LayoutParams(
- MapView.LayoutParams.WRAP_CONTENT,
- MapView.LayoutParams.WRAP_CONTENT, null,
- MapView.LayoutParams.BOTTOM_CENTER);
- mapView.addView(popView, params);
- popView.setVisibility(View.INVISIBLE);// 不可见
- }
- /**
- * 绘制文本图形
- */
- private void draw()
- {
- // 覆盖物操作
- // ①获取存放覆盖物的集合(MapView)
- List<Overlay> overlays = mapView.getOverlays();
- // ②创建自己的overlays信息添加集合中
- ItemizedOverlay<OverlayItem> overlay = new ItemizedOverlay<OverlayItem>(
- getResources().getDrawable(R.drawable.eat_icon), mapView)
- {
- @Override
- protected boolean onTap(int index)
- {
- OverlayItem item = getItem(index);
- // 更新pop
- MapView.LayoutParams params = new MapView.LayoutParams(
- MapView.LayoutParams.WRAP_CONTENT,
- MapView.LayoutParams.WRAP_CONTENT, item.getPoint(),
- MapView.LayoutParams.BOTTOM_CENTER);
- mapView.updateViewLayout(popView, params);
- popView.setVisibility(View.VISIBLE);
- //务必在这里实例化TextView空间,否则会报空指针异常。
- title = (TextView) findViewById(R.id.title);
- title.setText(item.getTitle());
- return super.onTap(index);
- }
- };
- setData(overlay);
- overlays.add(overlay);
- // ③刷新mapView
- mapView.refresh();
- }
- // 设置多条目数据
- private void setData(ItemizedOverlay<OverlayItem> overlay)
- {
- // OverlayItem(GeoPoint point, String title, String snippet)
- // protected GeoPoint mPoint
- // 该item的位置
- // protected String mTitle
- // 该item的标题文本
- // protected String mSnippet
- // 该item的文字片段
- String mSnippet = "该学校是由……";
- Item = new OverlayItem(geoPoint, "广东工业大学", mSnippet);
- overlay.addItem(Item);
- Item = new OverlayItem(new GeoPoint(latitude, longitude + 1000), "向东",
- "增加经度");
- overlay.addItem(Item);
- Item = new OverlayItem(new GeoPoint(latitude, longitude - 1000), "向西",
- "减少经度");
- overlay.addItem(Item);
- Item = new OverlayItem(new GeoPoint(latitude + 1000, longitude - 1000),
- "向西北", "增加纬度,减少经度");
- overlay.addItem(Item);
- }
- }
复制代码
|
| |