我正在使用谷歌地图API制作GPS追踪器,并使用ItemizedOverylay在地图上显示用户的当前位置.由于用户位置定期更改,我设置了一个CountDownTimer来删除当前的Itemizedoverlay并在每5秒在新位置添加一个新的(无法更改itemizedOverlay的位置)但是屏幕没有绘制新的职位,除非我身体触摸屏幕!这是我的逐项覆盖的代码:
import java.util.ArrayList;
import java.util.List;
import android.app.AlertDialog;
import android.content.Context;
import android.graphics.drawable.Drawable;
import android.widget.Toast;
import com.google.android.maps.ItemizedOverlay;
import com.google.android.maps.OverlayItem;
public class HelloItemizedOverlay extends ItemizedOverlay{
private ArrayList<OverlayItem> mOverlays = new ArrayList<OverlayItem>();
Context mContext;
public HelloItemizedOverlay(Drawable defaultMarker) {
/*This passes the defaultMarker up to the default constructor
* to bound its coordinates and then initialize mContext with the given Context.*/
super(boundCenterBottom(defaultMarker));
}
public HelloItemizedOverlay(Drawable defaultMarker, Context context) {
/*This passes the defaultMarker up to the default constructor
* to bound its coordinates and then …
Run Code Online (Sandbox Code Playgroud) 我正在开发一个应用程序,用于显示在Google MapView上移动项目的位置.我需要一种方法来更新代表项目的图标的位置(以及当更新数据进入时每两秒更改图标的面部).
我目前在应用程序中有一个扩展MapActivity的活动.在此我已经覆盖了一个静态叠加层,它在地图上绘制了一些线条,以及一个绘制静态图标的ItemizedOverlay.
有一个draw()方法声称由动画叠加使用,但覆盖它来做我的动画仍然没有做任何动画.
我是否需要告诉应用程序使我的叠加层动画,或者我是否需要使用其他类型的叠加层?
我已经能够使用"MapActivity"和"ItemizedOverlay"在Android上使用Eclipse在Google地图上绘制叠加层.但是当地图放大和缩小时,叠加层不会改变大小.
我希望叠加层在地图上"固定",并与地图一起放大和缩小.如何才能做到这一点?
我找不到定义边界的教程(例如,将GPS坐标作为叠加图像的角).如果您了解一些,请提供链接.
这样做的任何其他方式?
非常感谢.
使用com.google.android.maps API,我有一个MapActivity
它使用ItemizedOverlay
放置多个(最多约1000)上的图标MapView
.当LocationListener
检测到设备移动了一定距离(目前为5米,但仅用于测试)时,我想刷新(或者只是添加到列表中)图标.
我已经添加了setLastFocusedIndex(-1)
和populate()
,但我的ItemizedOverlay仍然会崩溃. 我认为当我向列表中添加更多项目时会崩溃,但有时即使我不移动手机也会崩溃.它在第一次更新时崩溃了.我无法从LogCat中确切地知道是什么触发了错误.
我的MapActivity基于各种教程:
编辑:调整代码来批量更新项目,但它仍然崩溃
public class NearbyActivity extends MapActivity implements VenueCatalogListener {
private final String TAG = this.getClass().getSimpleName();
List<Overlay> mapOverlays;
HelloItemizedOverlay itemizedOverlay;
private MapController mapController;
private MapView mapView;
private LocationManager locationManager;
private int latE6;
private int lonE6;
private Location current_location;
private VenuesFromServer venues_from_server;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
venues_from_server = new VenuesFromServer(this);
setupViews();
}
private void setupViews() {
setContentView(R.layout.nearby_view);
RelativeLayout linearLayout …
Run Code Online (Sandbox Code Playgroud) 我正在使用ItemizedIconOverlay类,我目前正在地图上显示事件以及具有相同默认图标的用户位置.
如何更改每个叠加层的图标集?
是否有类似于google.maps示例的内容:
drawable = getResources().getDrawable(R.drawable.marker);
drawable3 = getResources().getDrawable(R.drawable.disruption);
drawable2 = getResources().getDrawable(R.drawable.marker_me);
itemizedOverlay = new MyItemizedOverlay(drawable, mapView);
itemizedOverlay2 = new MyItemizedOverlay(drawable2, mapView);
itemizedOverlay3 = new MyItemizedOverlay(drawable3, mapView);
Run Code Online (Sandbox Code Playgroud)
我让每个itemizedOverlay都有自己的标记......
如何使用Open Street Maps执行此操作?
mResourceProxy = new DefaultResourceProxyImpl(getApplicationContext());
this.mMyLocationOverlay = new ItemizedIconOverlay<OverlayItem>(mItems, new Glistener(), mResourceProxy);
Run Code Online (Sandbox Code Playgroud)
感谢您的帮助,遗憾的是,这个开源项目无需在线提供支持......
我正在开发一个基于位置的Android应用程序,它处理大量的叠加项目.
背景: 我想在地图上显示很多实体.实体的坐标随着位置的变化而实时变化.对应于更新的位置,实体应在地图上更新.实体可以增长到很多.
实施 我有两个叠加.一个用于显示用户位置的MyLocationOverlay,另一个用于显示我需要在地图上显示的所有实体的ItemizedOverlay子类.
问题 每当实体的位置发生变化时,都需要更新相应的重叠项.问题是我不确定哪种方法是最好的方法.我有这些选择
当我收到特定实体的位置时,我会从地图中删除所有叠加层并重新添加叠加层.现在使用更新的位置创建其中一个叠加层.
List<Overlay> overlays = map.getOverlays();
overlays.removeAll(overlays);
overlays.add(new MyOverlay(marker,this));
Run Code Online (Sandbox Code Playgroud)我为每个实体创建了一个叠加层.意思是我将创建500个叠加层,每个叠加层只包含一个叠加层项目.我创建了一个Overlay类的子类,并添加了我自己的属性来清楚地标识实体并为每个实体创建一个.当我到达特定实体的位置更新时,我迭代并获取特定的覆盖项,删除它并添加一个具有更新位置的新项.
我不知道哪个是最好的使用性能.
当实体数量超过500或1000时,我觉得删除所有并重新添加每个单个实体的每个单一位置更新(可能经常)的所有叠加都会成为相当大的开销.
同时,迭代相同数量的实体也可能是相同的开销.
任何可供选择的建议或更好的实施方法都将受到赞赏.
/安迪
我正在一个ItemizedOverlay中构建一个包含几十个OverlayItems的地图.我的地图可以近距离观看(关于缩放级别18+),OverlayItems彼此非常接近.放大时地图看起来很好.但是,如果用户缩小图标开始重叠,一切看起来都非常难看.
有没有办法控制OverlayItem图标大小,以便它与地图缩放?如果没有,有没有办法在达到特定缩放级别后隐藏图标?关于如何处理这个问题的任何其他建议?
到目前为止,我正在使用drawable来填充我的地图上的标记.现在我想知道如果我能在地图中显示自定义imageview作为标记会很酷.
到现在为止我喜欢这样做
itemized= new Itemazide(drawable, mContext);
Run Code Online (Sandbox Code Playgroud)
我希望实现类似的目标
您将如何创建和覆盖整个地图的ItemizedOverlay?
我在地图上有多个标记是ItemizedOverlay类。
我想创建另一个ItemizedOverlay,它覆盖整个地图,以拦截不是在我的标记上而是在地图本身上的触摸事件。我已经在其他SO类似这样的问题读一个,要做到这一点的唯一方法是通过ItemizedOverlay->中的onTap。问题是我不知道如何创建覆盖整个地图的Drawable标记。
我已经试验了LinearLayout可绘制对象,但它似乎只能使用可绘制图像作为标记。
这是我的代码
private class BackgroundOverlay<Item extends OverlayItem> extends ItemizedOverlay<OverlayItem>{
private ArrayList<OverlayItem> overlays = new ArrayList<OverlayItem>();
/**
* @param defaultMarker
*/
public BackgroundOverlay(Drawable defaultMarker,Context context) {
super(boundCenterBottom(defaultMarker));
}
@Override
protected OverlayItem createItem(int i) {
return overlays.get(i);
}
@Override
public int size() {
return overlays.size();
}
public void addOverlay(OverlayItem overlay) {
overlays.add(overlay);
populate();
}
protected boolean onTap(int index){
Toast.makeText(getApplicationContext(), "Touched background",Toast.LENGTH_SHORT).show();
return true;
}
}
Run Code Online (Sandbox Code Playgroud)
并创建覆盖
Drawable d=this.getResources().getDrawable(R.layout.full_screen);
BackgroundOverlay<OverlayItem> lay = new BackgroundOverlay<OverlayItem>(d,this);
overlayItem = new OverlayItem(this.mapView.getMapCenter(), …
Run Code Online (Sandbox Code Playgroud) 我必须在mapview上显示多个(大约600个,所有可点击以显示有关它们的信息)覆盖项目.对于性能问题,我认为将它们分组到不同的ItemizedOverlay类是明智的,因为每个组都会显示关于它们的不同类型的信息.(特别是项目是机场,VOR,NDB以及有关航空的事情).
我的问题是,如果我把它们分成几个班并展示它们,那么表现就是超级.地图流畅.但是当我在第一层顶部添加第二层时,第一层上的项目变得不可点击.
当我读了很多,并使用Log.i方法调试时,我意识到每个图层都被点击,但只有OnTap(Geopoint point,MapView mapview)方法被调用.调用super.onTap(point,mapview)不起作用.我需要onTap(int index)方法来识别标记.(我的课程中有两种方法(在我阅读了很多例子之后)).
所以我该怎么做?有什么方法可以解决我的问题吗?我不想进入沉重的方法,例如将点击的坐标与所有叠加项坐标进行比较以找到任何接近的东西.
提前致谢.
android ×10
itemizedoverlay ×10
google-maps ×7
overlay ×2
android-maps ×1
gps ×1
location ×1
map ×1
osmdroid ×1
overlayitem ×1