Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在Android的OSMDroid中旋转一个标记?_Java_Android_Maps_Openstreetmap_Osmdroid - Fatal编程技术网

Java 在Android的OSMDroid中旋转一个标记?

Java 在Android的OSMDroid中旋转一个标记?,java,android,maps,openstreetmap,osmdroid,Java,Android,Maps,Openstreetmap,Osmdroid,好的,这个问题困扰了我好几个小时,我有以下相对简单的代码在osmdroid映射上放置一个标记 final ArrayList<OverlayItem> items = new ArrayList<OverlayItem>(); OverlayItem marker = new OverlayItem("markerTitle", "markerDescription", new GeoPoint(52.033954,1.210179)); marker.setMarker

好的,这个问题困扰了我好几个小时,我有以下相对简单的代码在osmdroid映射上放置一个标记

final ArrayList<OverlayItem> items = new ArrayList<OverlayItem>();
OverlayItem marker = new OverlayItem("markerTitle", "markerDescription", new GeoPoint(52.033954,1.210179));
marker.setMarkerHotspot(OverlayItem.HotspotPlace.TOP_CENTER);
items.add(marker);

Drawable newMarker = this.getResources().getDrawable(R.drawable.maincar);
DefaultResourceProxyImpl resProxyImp = new DefaultResourceProxyImpl(getApplicationContext());
ItemizedIconOverlay markersOverlay = new ItemizedIconOverlay<OverlayItem>(items, newMarker, null, resProxyImp);
mapView.getOverlays().add(markersOverlay);
final ArrayList items=new ArrayList();
叠加瞬变电磁标记=新叠加瞬变电磁(“markerTitle”、“markerDescription”、新地质点(52.033954,1.210179));
marker.setMarkerHotspot(覆盖项目、热点位置、顶部中心);
项目。添加(标记);
Drawable newMarker=this.getResources().getDrawable(R.Drawable.maincar);
DefaultResourceProxyImpl resProxyImp=新的DefaultResourceProxyImpl(getApplicationContext());
itemizedictionoverlay markersOverlay=newitemizedictionoverlay(items,newMarker,null,resProxyImp);
mapView.getOverlays().add(markersOverlay);

但是,标记始终朝向屏幕顶部(0度)。我怎样才能轻松地将每个标记旋转到指定的角度(360度是一个整圈)?

尝试以下方法:仅当需要旋转相机时

CameraPosition cameraPosition = new CameraPosition.Builder()
                .target(centerCoordinates)      // Sets the center of the map
                .zoom(zoom)                   // Sets the zoom
                .bearing(bearing)             // Sets the orientation of the camera to east
                .tilt(30)                   // Sets the tilt of the camera to 30 degrees
                .build();                   // Creates a CameraPosition from the builder

googleMap.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition));

最好的方法可能是创建ItemizedItemOverlay的子类。重写onDrawItem()并尝试以下操作:

@Override
protected void onDrawItem(ISafeCanvas canvas, Item item, Point curScreenCoords, float aMapOrientation) {

    int degrees = 90;
    canvas.save();
    canvas.rotate(degrees, curScreenCoords.x, curScreenCoords.y);
    super.onDrawItem(canvas, item, curScreenCoords, aMapOrientation);
    canvas.restore();
}
Bitmap source = BitmapFactory.decodeResource(this.getResources(), R.drawable.ic_launcher);

Bitmap target = RotateMyBitmap(source, 120.0f);

final ArrayList<OverlayItem> items = new ArrayList<OverlayItem>();
OverlayItem marker = new OverlayItem("markerTitle", "markerDescription", new GeoPoint(52.033954,1.210179));
marker.setMarkerHotspot(OverlayItem.HotspotPlace.TOP_CENTER);
items.add(marker);

Drawable newMarker = new BitmapDrawable(getResources(), target);

//Drawable newMarker = this.getResources().getDrawable(R.drawable.maincar);
DefaultResourceProxyImpl resProxyImp = new DefaultResourceProxyImpl(getApplicationContext());
ItemizedIconOverlay markersOverlay = new ItemizedIconOverlay<OverlayItem>(items, newMarker, null, resProxyImp);
mapView.getOverlays().add(markersOverlay);

尝试使用如下方法使用RotateMyBitmap

@Override
protected void onDrawItem(ISafeCanvas canvas, Item item, Point curScreenCoords, float aMapOrientation) {

    int degrees = 90;
    canvas.save();
    canvas.rotate(degrees, curScreenCoords.x, curScreenCoords.y);
    super.onDrawItem(canvas, item, curScreenCoords, aMapOrientation);
    canvas.restore();
}
Bitmap source = BitmapFactory.decodeResource(this.getResources(), R.drawable.ic_launcher);

Bitmap target = RotateMyBitmap(source, 120.0f);

final ArrayList<OverlayItem> items = new ArrayList<OverlayItem>();
OverlayItem marker = new OverlayItem("markerTitle", "markerDescription", new GeoPoint(52.033954,1.210179));
marker.setMarkerHotspot(OverlayItem.HotspotPlace.TOP_CENTER);
items.add(marker);

Drawable newMarker = new BitmapDrawable(getResources(), target);

//Drawable newMarker = this.getResources().getDrawable(R.drawable.maincar);
DefaultResourceProxyImpl resProxyImp = new DefaultResourceProxyImpl(getApplicationContext());
ItemizedIconOverlay markersOverlay = new ItemizedIconOverlay<OverlayItem>(items, newMarker, null, resProxyImp);
mapView.getOverlays().add(markersOverlay);
结果是:

这很好,但我建议您使用class

这个怎么样:

Bitmap bmpOriginal = BitmapFactory.decodeResource(this.getResources(), R.drawable.maincar_osm);
Bitmap bmResult = Bitmap.createBitmap(bmpOriginal.getWidth()*2, bmpOriginal.getHeight()*2, Bitmap.Config.ARGB_8888);
Canvas tempCanvas = new Canvas(bmResult);
tempCanvas.rotate(270, bmpOriginal.getWidth()/2, bmpOriginal.getHeight()/2);
tempCanvas.drawBitmap(bmpOriginal, 0, 0, null);
Drawable newMarker = new BitmapDrawable(getResources(),bmResult);
DefaultResourceProxyImpl resProxyImp = new DefaultResourceProxyImpl(getApplicationContext());
ItemizedIconOverlay markersOverlay = new ItemizedIconOverlay<OverlayItem>(items, newMarker, null, resProxyImp);
mapView.getOverlays().add(markersOverlay);
Bitmap bmpOriginal=BitmapFactory.decodeResource(this.getResources(),R.drawable.maincar\u osm);
位图bmResult=Bitmap.createBitmap(bmpOriginal.getWidth()*2,bmpOriginal.getHeight()*2,Bitmap.Config.ARGB_8888);
Canvas tempCanvas=新画布(bmResult);
tempCanvas.rotate(270,bmpOriginal.getWidth()/2,bmpOriginal.getHeight()/2);
drawBitmap(bmpOriginal,0,0,null);
Drawable newMarker=新的位图Drawable(getResources(),bmResult);
DefaultResourceProxyImpl resProxyImp=新的DefaultResourceProxyImpl(getApplicationContext());
itemizedictionoverlay markersOverlay=newitemizedictionoverlay(items,newMarker,null,resProxyImp);
mapView.getOverlays().add(markersOverlay);

如果您不想添加任何自定义代码,您还可以使用(位于osmdroid顶部)的标记替换
itemizedictionoverlay

它支持
设置旋转(度数)


它还支持“平面”或“广告牌”模式,这取决于如果地图也旋转,您希望发生什么。

不幸的是,这是针对谷歌地图而不是OSM,并旋转整个地图,而不仅仅是标记。谢谢你至少能回答:-)考虑把赏金给回答你问题的人。