- 浏览: 443841 次
- 性别:
- 来自: 武汉
文章分类
最新评论
-
supertangcugu:
文中有个错误,SoftReference是软引用,Strong ...
WeakReference与SoftReference -
somefuture:
我每次走到movie.draw(canvas,0, 0); ...
利用Movie播放GIF -
鞠文婷:
徐颖慧 写道为什么打不开啊?额 果然打不开了。。
50个Android开发人员必备UI效果源码[转载] -
徐颖慧:
为什么打不开啊?
50个Android开发人员必备UI效果源码[转载] -
李白625:
为什么打不开啊
50个Android开发人员必备UI效果源码[转载]
实现一个ItemizedOverlay其实很简单,首先一个装载item的list,用于读取并绘制每一个item,创建一个添加方法 add 剩下的事情留给框架处理吧
package map.chaos.com;
import java.util.ArrayList;
import java.util.List;
import android.app.AlertDialog;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.drawable.Drawable;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.widget.Toast;
import com.google.android.maps.GeoPoint;
import com.google.android.maps.ItemizedOverlay;
import com.google.android.maps.MapActivity;
import com.google.android.maps.MapController;
import com.google.android.maps.MapView;
import com.google.android.maps.Overlay;
import com.google.android.maps.OverlayItem;
public class MyMap extends MapActivity {
MapView mapview;
MapController controller;
GeoPoint[] g=new GeoPoint[5];
LocationManager locationManager;
Drawable[] drawables;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
drawables=new Drawable[]{getResources().getDrawable(R.drawable.home),
getResources().getDrawable(R.drawable.tg001),getResources().getDrawable(R.drawable.tg002),
getResources().getDrawable(R.drawable.tg003),getResources().getDrawable(R.drawable.tg004)};
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//设置mapview
mapview = (MapView) findViewById(R.id.mapview);
mapview.setTraffic(false);
mapview.setSatellite(false);
mapview.setStreetView(false);
mapview.setEnabled(true);
mapview.setClickable(true);
mapview.setBuiltInZoomControls(true);
locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
locationManager.requestLocationUpdates(locationManager.GPS_PROVIDER,
60000, 0, new LocationListener() {
public void onLocationChanged(Location location) {
// TODO Auto-generated method stub
// controller.animateTo(locationToGeopoint(location));
}
public void onProviderDisabled(String provider) {
// TODO Auto-generated method stub
}
public void onProviderEnabled(String provider) {
// TODO Auto-generated method stub
}
public void onStatusChanged(String provider, int status,
Bundle extras) {
// TODO Auto-generated method stub
}
});
Location location = locationManager.getLastKnownLocation(locationManager.GPS_PROVIDER);
List<Overlay> list = mapview.getOverlays();
//初始化GeoPoint
g[0]=locationToGeopoint(location);
g[1]=new GeoPoint(30523109,114389224);
g[2]=new GeoPoint(30623059,115389344);
//添加了3个MarkMyMap对象 显示3个不同的图标
MarkMyMap home = new MarkMyMap(drawables[0], this);
OverlayItem item_home = new OverlayItem(locationToGeopoint(location),"IAMHOME", "Home");
home.addOverlay(item_home);
MarkMyMap tg1=new MarkMyMap(drawables[1],this);
OverlayItem item_tg1=new OverlayItem(g[1],"tg1","tg1");
tg1.addOverlay(item_tg1);
MarkMyMap tg2=new MarkMyMap(drawables[2],this);
OverlayItem item_tg2=new OverlayItem(g[2],"tg2","tg2");
tg2.addOverlay(item_tg2);
// 添加到Overlay的list当中
list.add(home);
list.add(tg1);
list.add(tg2);
controller = mapview.getController();
controller.setZoom(17);
controller.animateTo(locationToGeopoint(location));
}
// location转GeoPoint
public GeoPoint locationToGeopoint(Location location) {
// TODO Auto-generated method stub
int gX = (int) (location.getLatitude() * 1E6);
int gY = (int) (location.getLongitude() * 1E6);
GeoPoint gp = new GeoPoint(gX, gY);
return gp;
}
@Override
protected boolean isRouteDisplayed() {
// TODO Auto-generated method stub
return false;
}
// 计算亮点距离
public String getDistance(GeoPoint gp){
float latitude_A=(float) (g[0].getLatitudeE6()/1E6);
float longitude_A=(float) (g[0].getLongitudeE6()/1E6);
float latitude_B=(float) (gp.getLatitudeE6()/1E6);
float longitude_B=(float) (gp.getLongitudeE6()/1E6);
float a=latitude_A-latitude_B;
float b=longitude_A-longitude_B;
float distance=(float) (2*6378.137*Math.asin(
Math.sin(a/2)*Math.sin(a/2)+Math.cos(latitude_A)*Math.cos(latitude_B)*Math.sin(b/2)*Math.sin(b/2)
));
return "与我相距 "+Math.round(distance*1000)+" 米";
}
// 处理地图标记
class MarkMyMap extends ItemizedOverlay<OverlayItem> {
ArrayList<OverlayItem> itemsOverlay = new ArrayList<OverlayItem>();
Context context;
GeoPoint tg;
public MarkMyMap(Drawable defaultMarker) {
//这里一定要加上boundCenterBottom 否则图片根本显示不出来 而不是显示效果不佳
super(boundCenterBottom(defaultMarker));
// TODO Auto-generated constructor stub
}
public MarkMyMap(Drawable defaultMaker, Context context) {
this(defaultMaker);//调用上一个构造器
this.context = context;
}
@Override
protected OverlayItem createItem(int i) {
// TODO Auto-generated method stub
//GeoPoint和location转换使用1E6 精度不会丢失很严重
System.out.println("itemsOverlay.get(i).getMarker(i)====>"+ itemsOverlay.get(i).getPoint());
return itemsOverlay.get(i);
}
@Override
public int size() {
// TODO Auto-generated method stub
return itemsOverlay.size();
}
//mapview里使用
@Override
protected boolean onTap(int index) {
// TODO Auto-generated method stub
//如果同一个对象 添加了很多item 这里可以显示被点击的item ID
System.out.println("index is "+index);
Toast.makeText(context, getDistance(tg), Toast.LENGTH_SHORT).show();
return true;
}
public void addOverlay(OverlayItem item) {
itemsOverlay.add(item);
System.out.println("itemsOverlay.size()=====" + itemsOverlay.size());
tg=item.getPoint();
this.populate();//通知overlay添加数据
}
}
}
引用
package map.chaos.com;
import java.util.ArrayList;
import java.util.List;
import android.app.AlertDialog;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.drawable.Drawable;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.widget.Toast;
import com.google.android.maps.GeoPoint;
import com.google.android.maps.ItemizedOverlay;
import com.google.android.maps.MapActivity;
import com.google.android.maps.MapController;
import com.google.android.maps.MapView;
import com.google.android.maps.Overlay;
import com.google.android.maps.OverlayItem;
public class MyMap extends MapActivity {
MapView mapview;
MapController controller;
GeoPoint[] g=new GeoPoint[5];
LocationManager locationManager;
Drawable[] drawables;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
drawables=new Drawable[]{getResources().getDrawable(R.drawable.home),
getResources().getDrawable(R.drawable.tg001),getResources().getDrawable(R.drawable.tg002),
getResources().getDrawable(R.drawable.tg003),getResources().getDrawable(R.drawable.tg004)};
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//设置mapview
mapview = (MapView) findViewById(R.id.mapview);
mapview.setTraffic(false);
mapview.setSatellite(false);
mapview.setStreetView(false);
mapview.setEnabled(true);
mapview.setClickable(true);
mapview.setBuiltInZoomControls(true);
locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
locationManager.requestLocationUpdates(locationManager.GPS_PROVIDER,
60000, 0, new LocationListener() {
public void onLocationChanged(Location location) {
// TODO Auto-generated method stub
// controller.animateTo(locationToGeopoint(location));
}
public void onProviderDisabled(String provider) {
// TODO Auto-generated method stub
}
public void onProviderEnabled(String provider) {
// TODO Auto-generated method stub
}
public void onStatusChanged(String provider, int status,
Bundle extras) {
// TODO Auto-generated method stub
}
});
Location location = locationManager.getLastKnownLocation(locationManager.GPS_PROVIDER);
List<Overlay> list = mapview.getOverlays();
//初始化GeoPoint
g[0]=locationToGeopoint(location);
g[1]=new GeoPoint(30523109,114389224);
g[2]=new GeoPoint(30623059,115389344);
//添加了3个MarkMyMap对象 显示3个不同的图标
MarkMyMap home = new MarkMyMap(drawables[0], this);
OverlayItem item_home = new OverlayItem(locationToGeopoint(location),"IAMHOME", "Home");
home.addOverlay(item_home);
MarkMyMap tg1=new MarkMyMap(drawables[1],this);
OverlayItem item_tg1=new OverlayItem(g[1],"tg1","tg1");
tg1.addOverlay(item_tg1);
MarkMyMap tg2=new MarkMyMap(drawables[2],this);
OverlayItem item_tg2=new OverlayItem(g[2],"tg2","tg2");
tg2.addOverlay(item_tg2);
// 添加到Overlay的list当中
list.add(home);
list.add(tg1);
list.add(tg2);
controller = mapview.getController();
controller.setZoom(17);
controller.animateTo(locationToGeopoint(location));
}
// location转GeoPoint
public GeoPoint locationToGeopoint(Location location) {
// TODO Auto-generated method stub
int gX = (int) (location.getLatitude() * 1E6);
int gY = (int) (location.getLongitude() * 1E6);
GeoPoint gp = new GeoPoint(gX, gY);
return gp;
}
@Override
protected boolean isRouteDisplayed() {
// TODO Auto-generated method stub
return false;
}
// 计算亮点距离
public String getDistance(GeoPoint gp){
float latitude_A=(float) (g[0].getLatitudeE6()/1E6);
float longitude_A=(float) (g[0].getLongitudeE6()/1E6);
float latitude_B=(float) (gp.getLatitudeE6()/1E6);
float longitude_B=(float) (gp.getLongitudeE6()/1E6);
float a=latitude_A-latitude_B;
float b=longitude_A-longitude_B;
float distance=(float) (2*6378.137*Math.asin(
Math.sin(a/2)*Math.sin(a/2)+Math.cos(latitude_A)*Math.cos(latitude_B)*Math.sin(b/2)*Math.sin(b/2)
));
return "与我相距 "+Math.round(distance*1000)+" 米";
}
// 处理地图标记
class MarkMyMap extends ItemizedOverlay<OverlayItem> {
ArrayList<OverlayItem> itemsOverlay = new ArrayList<OverlayItem>();
Context context;
GeoPoint tg;
public MarkMyMap(Drawable defaultMarker) {
//这里一定要加上boundCenterBottom 否则图片根本显示不出来 而不是显示效果不佳
super(boundCenterBottom(defaultMarker));
// TODO Auto-generated constructor stub
}
public MarkMyMap(Drawable defaultMaker, Context context) {
this(defaultMaker);//调用上一个构造器
this.context = context;
}
@Override
protected OverlayItem createItem(int i) {
// TODO Auto-generated method stub
//GeoPoint和location转换使用1E6 精度不会丢失很严重
System.out.println("itemsOverlay.get(i).getMarker(i)====>"+ itemsOverlay.get(i).getPoint());
return itemsOverlay.get(i);
}
@Override
public int size() {
// TODO Auto-generated method stub
return itemsOverlay.size();
}
//mapview里使用
@Override
protected boolean onTap(int index) {
// TODO Auto-generated method stub
//如果同一个对象 添加了很多item 这里可以显示被点击的item ID
System.out.println("index is "+index);
Toast.makeText(context, getDistance(tg), Toast.LENGTH_SHORT).show();
return true;
}
public void addOverlay(OverlayItem item) {
itemsOverlay.add(item);
System.out.println("itemsOverlay.size()=====" + itemsOverlay.size());
tg=item.getPoint();
this.populate();//通知overlay添加数据
}
}
}
发表评论
-
Android OpenGL库函数列表
2014-11-26 10:44 1197Android OpenGL库函数列表 OpenGl核 ... -
FFmpeg Android部分的编译
2014-06-19 17:09 1185编译的是最新版2.2.3。再说编译环境 操作系统 ubun ... -
AVPacket与AVFrame的关系
2014-06-19 16:19 9958最近在做ffmpeg相关的项目,满眼的AVPacket和AV ... -
WebView 自适应全屏
2013-10-30 11:29 5223网上有通行的3中方法 写道 第一种: settings ... -
NDK调试
2013-10-24 16:41 5826大体根据官方攻略 http://tools.android ... -
adb logcat 打印输出
2013-08-06 11:43 3112深圳公司的同事在测试的时候遇到一些bug 我这边没办法重 ... -
android上加载大图片需要注意的问题
2013-07-16 21:47 9387尽量不要使用setImageBitmap或setImageR ... -
XMPP下的注册与登录
2013-06-24 23:43 6692前面讲了本地如何搭建XMPP环境 其实我不懂 也没认真的好好 ... -
XMPP 环境快速搭建
2013-06-24 22:31 1218这年头微信火 于是好多公司都要跟风 搭建环境其实挺简单 ... -
利用Movie播放GIF
2013-05-09 16:52 5091public class ViewContent ex ... -
ListView分隔线的显示
2013-04-08 16:21 1536项目中需要在listview中添加footview 出现了 ... -
结合popwindow与gridview的一例
2013-03-15 16:04 1376项目中需要实现一个gridview 点击某项弹出一个popu ... -
[转]Android中Matrix的pre post set方法理解
2013-03-08 15:03 1224虽说以前学习过线性代数和图形学原理,但是在实际中碰到matr ... -
50个Android开发人员必备UI效果源码[转载]
2013-03-08 09:29 44526Android 仿微信之主页面实现篇Android 仿微信之界 ... -
对View DrawingCache的理解
2013-02-18 19:37 1072View组件显示的内容可以通过cache机制保存为bitm ... -
Fragment使用方法一则
2013-02-18 17:28 1529之前在项目里也用到了fragment,作为横向滑动的组件显示 ... -
AVD ROOT
2012-12-04 11:47 3181启动一个模拟器,开 ... -
onTouchEvent 、onInterceptTouchEvent的顺序~
2012-10-26 10:29 1166转自:http://yxwww.iteye.com/blog/ ... -
ListView滑动获取分页 并异步加载每一项的图片
2012-09-26 10:40 4483项目有一个需求就是从服务器获取一个分页数据,数据按json数组 ... -
解析apk文件的图标等内容
2012-09-05 15:56 3254import java.lang.reflect. ...
相关推荐
使用ItemizedOverlay在mapview上创建浮动按钮,可以为坐标创建一个单击事件。
这是一个基于高德地图的测试,介绍了ItemizedOverlay的用法和populate()的作用。
Android学习笔记之百度地图(分条目覆盖物:ItemizedOverlay)
7.7.8 ItemizedOverlay和Overlayltem简介 7.7.9 将View固定到地图和地图的某个位置上 7.8 对Earthquake示例添加地图功能 7.9 小结 第8章 后台工作 8.1 服务简介 8.1.1 创建和控制服务 8.1.2 将活动和服务绑定 8.2 ...
7.7.8 ItemizedOverlay和Overlayltem简介 7.7.9 将View固定到地图和地图的某个位置上 7.8 对Earthquake示例添加地图功能 7.9 小结 第8章 后台工作 8.1 服务简介 8.1.1 创建和控制服务 8.1.2 将活动和服务绑定 8.2 ...
gmap上的一个气球开发的实例,使用ItemizedOverlay类开发,效果不错。
7.7.8 ItemizedOverlay和OverlayItem简介 239 7.7.9 将View固定到地图和地图的某个位置上 240 7.8 对Earthquake示例添加地图功能 241 7.9 小结 247 第8章 后台工作 249 8.1 服务简介 250 8.1.1 创建和控制服务...
(五)自定义图层ItemizedOverlay和在地图上增加标注 10 (六)增加点击标注弹出气泡(显示标注信息)的功能 12 (七)增加POI搜索功能 15 三、百度地图的信息推送 19 (一)PC服务端 19 (二) Android手机客户端 22 四...
当使用android地图外部库(com.google.android.maps)时,android-mapviewballoons会提供一个简单的方式来对地图覆盖进行标注,就是一个简单的信息气泡,它由...BalloonItemizedOverlay是ItemizedOverlay的一个抽象扩展
android-mapviewballoons 当使用Android地图外部库(com.google.android.maps)时,android- mapviewballoons会提供一个简单的方式来对地图覆盖进行标注...BalloonItemizedOverlay是ItemizedOverlay的一个抽象扩展。
o 4.3 分条目覆盖物:ItemizedOverlay o 4.4 本地搜索覆盖物:PoiOverlay o 4.5 驾车路线覆盖物:RouteOverlay o 4.6 换乘路线覆盖物:TransitOverlay • 5 服务类 o 5.1 搜索服务 o 5.2 POI搜索及PoiOverlay o 5.3 ...
跟隨擁有Android Market單一應用程式下載超過20萬人次經驗的開發者,用最短的時間踏實...第四十一章 為地圖標上地標(ItemizedOverlay) 附錄A 後記 附錄B如何取得範例原始碼 这个是他BLOG的电子版,如喜欢请支持Z版。
定位:采用GPS、WIFI、基站、IP混合定位模式,请使用Android定位SDK获取定位信息,使用地图SDK定位图层进行位置展示。 较之v2.0.0,升级功能: 新增: 地图截图(getCurrentMap),返回bitmap图片 添加自定义...
ItemizedOverlay { private ArrayList<OverlayItem> mOverlays = new ArrayList(); public MyItemizedOverlay(Drawable defaultMarker) { super ( boundCenterBottom (defaultMarker));
我们使用百度地图的时候,点击地图上的Marker,会弹出一个该地点详细信息的窗口,如下左图所示,有时候,我们希望自己定义这个弹出窗口的内容,或者,干脆用自己的数据来构造这样的弹出窗口,但是,在百度地图最新的...
地图气泡效果源码,当使用Android地图外部库时,android-mapviewballoons会提供一个简单的方式来对地图覆盖进行标注,就是一个简单的信息气泡。它由BalloonOverlayView组成,是一个代表显示你的MapView及...
Drawing the ItemizedOverlay Handling Screen Taps My, Myself, and MyLocationOverlay The Key to It All ■Chapter 34: Handling Telephone Calls Report to the Manager You Make the Call! ■Chapter 35: ...