2

我正在尝试开发一个 android 应用程序来显示可缩放、可平移的地图(这只是一个位图图像),它还允许用户单击地图上的某些点。

我正在努力寻找实现此类应用程序的最有效方法。在尝试了许多其他方法(包括 Webviews、OpenLayers)之后,最好的方法(至少根据这个站点)似乎是使用带有 Canvas 的 SurfaceView。到目前为止,我的代码是从我在互联网上找到的片段拼凑而成的,所以它只是崩溃了。无论如何,我已经将它包含在这里,希望它可以让我对我想要实现的目标有所了解:

public class Main extends Activity {

private Bitmap bmp; 
    private SurfaceView surfaceView;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        surfaceView = (SurfaceView)findViewById(R.id.surface);
        bmp = BitmapFactory.decodeResource(getResources(),
             R.drawable.testmapbmp);
        //decode the bitmap file

        Canvas canvas = new Canvas(bmp);
        //create a canvas from the bitmap, then display it in surfaceview
        surfaceView.draw(canvas);
    }
}

这是实现我的应用程序所需功能的最佳方式吗?或者有没有更好的方法,特别是如果我以后会遇到问题,例如实现地图的可点击部分。

我真的需要以前创建过类似东西的人的帮助,所以我可以对这个问题进行思考,但我非常感谢任何帮助/指针/提示!

谢谢

4

1 回答 1

2

您的一段代码并不正确。

通常,如果您想做这种事情,您需要创建自己的自定义视图(通过继承 View 或 SurfaceView)。在您的 View 子类中,您需要覆盖方法 onDraw(Canvas) 并使用其中一种画布方法在画布上绘制位图。

要使其可平移和可缩放,您需要使用ScrollerScaleGestureDetector类。通常平移或缩放是通过使用其方法(旋转、缩放、平移)将仿射变换应用于画布来完成的。

SurfaceView 和 View 之间的区别在于,在 SurfaceView 中,您可以直接从单独的线程中进行绘制,这意味着您可以在那里组织某种渲染循环并从中进行绘制。它适用于简单的游戏和动画效果。我相信,为了绘制位图,这是矫枉过正的,而且对 View 的子类化要简单得多。

如果我是你,我会从这个这个开始。

于 2013-03-25T14:04:14.680 回答