Keep in mind that this is not an ideal approach, because the text on the map is a static image and will rotate along with the maps (at some point it will be turned upside down).
Here's an example of how to put a MapView in your own Layout widget and rotate it. I did this using OpenStreetMaps, but for Google Maps it should be exactly the same.
First create a spinning widget. Layout
package com.eli.util; import android.content.Context; import android.graphics.Canvas; import android.util.AttributeSet; import android.util.DisplayMetrics; import android.widget.LinearLayout; public class RotatingLinearLayout extends LinearLayout { private final int mDiagonal; private float mBearing; public RotatingLinearLayout(final Context pContext, final AttributeSet pAttrs) { super(pContext, pAttrs); final DisplayMetrics dm = pContext.getResources().getDisplayMetrics(); mDiagonal = (int) Math.hypot(dm.widthPixels, dm.heightPixels); } public void setBearing(final float pBearing) { mBearing = pBearing; } @Override protected void dispatchDraw(final Canvas pCanvas) { pCanvas.rotate(-mBearing, getWidth() >> 1, getHeight() >> 1); super.dispatchDraw(pCanvas); } @Override protected void onMeasure(final int pWidthMeasureSpec, final int pHeightMeasureSpec) { final int widthMode = MeasureSpec.getMode(pWidthMeasureSpec); final int heightMode = MeasureSpec.getMode(pHeightMeasureSpec); super.onMeasure(MeasureSpec.makeMeasureSpec(mDiagonal, widthMode), MeasureSpec.makeMeasureSpec(mDiagonal, heightMode)); } }
Surround it with your MapView in layout.xml
<com.eli.util.RotatingLinearLayout android:layout_width="fill_parent" android:layout_height="fill_parent" android:id="@+id/rotating_layout"> <org.osmdroid.views.MapView android:id="@+id/map_view" android:layout_width="fill_parent" android:layout_height="fill_parent" android:enabled="true" android:clickable="true"/> </com.eli.util.RotatingLinearLayout>
Now, every time you get a geo patch, update the bearing of the rotating layout and it should rotate.
source share