Android - osmbonuspack - 如何在地图上旋转标记标题
Android - osmbonuspack - how to rotate the marker title on the map
我的地图视图 (osmbonuspack) 旋转到步行方向。
如何在地图上旋转标记的标题,使其水平 - 即易于阅读?我看到在地图转动时标记本身不需要任何旋转。
步行方向的任何变化都会导致地图向右旋转:
mapview.setMapOrientation( (float) -headingByCompass);
因此,在进行任何更改时,我首先会在地图视图上找到所有标记。然后我尝试旋转它们......但标题方向仍然相同。
marker.setRotation( rotation);
可以肯定的是:这是关于倒置眼药水附近的文字。这不是气泡中的信息。
由于OSMBonusPack Marker试图模仿Google地图API,您可以参考https://developers.google.com/maps/documentation/android/marker
=> 您将获得平面/广告牌方向和旋转的描述。
如果您只是想让标记与屏幕对齐,这是默认行为,什么都不做(不旋转)。
顺便说一句,你叫 "Marker title" 什么?气泡中显示的标题?
标记本身没有附加标签。因此,我创建了一个名为 MarkerWithLabel 的 Marker 子class。在这个 subclass 中绘制了标题或标签。
当地图旋转时,旋转随后传递给所有MarkerWithLabel objects。地图视图上的后续无效将使更改可见。因此,标记和标签始终是水平的,以便于阅读。
MarkerWithLabel class它:
public class MarkerWithLabel extends Marker {
Paint textPaint = null;
String mLabel = null;
float rotation = 0.0f;
public MarkerWithLabel( MapView mapView, String label) {
super( mapView);
mLabel = label;
textPaint = new Paint();
textPaint.setColor( Color.RED);
textPaint.setTextSize( WaypointActivity.textSizeCanvas25sp);
textPaint.setAntiAlias(true);
textPaint.setTextAlign(Paint.Align.LEFT);
setTitle( label);
}
public void draw( final Canvas c, final MapView osmv, boolean shadow) {
draw( c, osmv);
}
public void draw( final Canvas c, final MapView osmv) {
super.draw( c, osmv, false);
Point p = this.mPositionPixels; // already provisioned by Marker
if( rotation <= -1 || rotation >= 1) { // could be left out
c.save();
c.rotate( rotation, p.x, p.y);
c.drawText( getTitle(), p.x, p.y+20, textPaint);
c.restore();
} else {
c.drawText( getTitle(), p.x, p.y+20, textPaint);
}
}
}
查找所有 MarkerWithLabel 实例很容易:
List<Overlay> markersOnTheMap = mv.getOverlays();
if( markersOnTheMap == null || markersOnTheMap.isEmpty()) {
return ;
}
for( int i = 0; i < markersOnTheMap.size(); i++) {
Object o = markersOnTheMap.get( i);
if( o instanceof MarkerWithLabel) {
MarkerWithLabel m = (MarkerWithLabel) o;
m.rotation = rotation;
}
}
希望对您有所帮助。
我的地图视图 (osmbonuspack) 旋转到步行方向。
如何在地图上旋转标记的标题,使其水平 - 即易于阅读?我看到在地图转动时标记本身不需要任何旋转。
步行方向的任何变化都会导致地图向右旋转:
mapview.setMapOrientation( (float) -headingByCompass);
因此,在进行任何更改时,我首先会在地图视图上找到所有标记。然后我尝试旋转它们......但标题方向仍然相同。
marker.setRotation( rotation);
可以肯定的是:这是关于倒置眼药水附近的文字。这不是气泡中的信息。
由于OSMBonusPack Marker试图模仿Google地图API,您可以参考https://developers.google.com/maps/documentation/android/marker
=> 您将获得平面/广告牌方向和旋转的描述。
如果您只是想让标记与屏幕对齐,这是默认行为,什么都不做(不旋转)。
顺便说一句,你叫 "Marker title" 什么?气泡中显示的标题?
标记本身没有附加标签。因此,我创建了一个名为 MarkerWithLabel 的 Marker 子class。在这个 subclass 中绘制了标题或标签。
当地图旋转时,旋转随后传递给所有MarkerWithLabel objects。地图视图上的后续无效将使更改可见。因此,标记和标签始终是水平的,以便于阅读。
MarkerWithLabel class它:
public class MarkerWithLabel extends Marker {
Paint textPaint = null;
String mLabel = null;
float rotation = 0.0f;
public MarkerWithLabel( MapView mapView, String label) {
super( mapView);
mLabel = label;
textPaint = new Paint();
textPaint.setColor( Color.RED);
textPaint.setTextSize( WaypointActivity.textSizeCanvas25sp);
textPaint.setAntiAlias(true);
textPaint.setTextAlign(Paint.Align.LEFT);
setTitle( label);
}
public void draw( final Canvas c, final MapView osmv, boolean shadow) {
draw( c, osmv);
}
public void draw( final Canvas c, final MapView osmv) {
super.draw( c, osmv, false);
Point p = this.mPositionPixels; // already provisioned by Marker
if( rotation <= -1 || rotation >= 1) { // could be left out
c.save();
c.rotate( rotation, p.x, p.y);
c.drawText( getTitle(), p.x, p.y+20, textPaint);
c.restore();
} else {
c.drawText( getTitle(), p.x, p.y+20, textPaint);
}
}
}
查找所有 MarkerWithLabel 实例很容易:
List<Overlay> markersOnTheMap = mv.getOverlays();
if( markersOnTheMap == null || markersOnTheMap.isEmpty()) {
return ;
}
for( int i = 0; i < markersOnTheMap.size(); i++) {
Object o = markersOnTheMap.get( i);
if( o instanceof MarkerWithLabel) {
MarkerWithLabel m = (MarkerWithLabel) o;
m.rotation = rotation;
}
}
希望对您有所帮助。