我正在尝试开发一个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);
}
}
这是实现我想要的应用程序功能的最佳方法吗?或者有更好的方法,特别是如果我以后遇到问题,例如实现地图的可点击部分。
我真的需要那些曾经创造过这样的东西的人的帮助,所以我可以对问题进行思考,但我非常感谢任何帮助/指针/提示!
由于
答案 0 :(得分:2)
你的代码不是很正确。
如果您想要创建自己的自定义视图(通过继承View或SurfaceView),则需要执行此操作。在View子类中,您需要覆盖方法onDraw(Canvas)并使用canvas方法之一在画布上绘制位图。
要使其可以平移和捏缩放,您需要使用Scroller和ScaleGestureDetector类。通常通过使用它的方法(旋转,缩放,平移)将仿射变换应用于画布来完成平移或缩放。
SurfaceView和View之间的区别在于,您可以在SurfaceView中直接从单独的线程绘制,这意味着您可以在那里组织渲染循环并从中进行绘制。它适用于简单的游戏和动画效果。我相信,为了绘制位图,这对于查看子类来说是过度的和简单的。