Android旋转MapView

Sha*_*dul 5 android rotation android-mapview

我正在创建一个应用程序,它可以在mapview上删除用户路径.当用户左转为实例地图时我想要实现的应该是自我旋转,使得mapview的头部始终指向向上的方向.我希望这是有道理的.

他说,我遇到了罗曼·盖伊先生的帖子

我过去已经这样做了,它需要创建一个自定义ViewGroup,在dispatchDraw()方法中旋转Canvas.您还需要增加MapView的大小(以便在旋转时绘制足够的像素.)您还需要在dispatchTouchEvent()中旋转触摸事件.或者,如果您使用Android 3.0,您只需调用MapView.rotate():

有没有人遇到过与我的问题类似的解决方案?一个工作的例子会非常好:)

Eli*_*ine 8

请记住,这不是一种理想的方法,因为地图上的文字是静态图像,并且会随地图图块一起旋转(在某些时候它会颠倒).

这是一个如何将其MapView放入您自己的Layout小部件并旋转它的示例.我已经使用OpenStreetMaps完成了它,但对于Google Maps来说应该是完全相同的.

首先创建"旋转" 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));
    }
}
Run Code Online (Sandbox Code Playgroud)

通过它你环绕MapViewlayout.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>
Run Code Online (Sandbox Code Playgroud)

现在,每次收到地理定位时,都要更新旋转布局的方位,然后应该转动.