Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/194.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在Surfaceview的画布上显示位图_Android_Canvas_Bitmap_Surfaceview - Fatal编程技术网

Android 在Surfaceview的画布上显示位图

Android 在Surfaceview的画布上显示位图,android,canvas,bitmap,surfaceview,Android,Canvas,Bitmap,Surfaceview,我正在尝试开发一个android应用程序来显示一个可缩放、可平移的地图(这只是一个位图图像),它还允许用户点击地图上的某些点 我正在努力寻找实现这种应用程序的最有效方法。在尝试了许多其他方法(包括WebView、OpenLayers)之后,最好的方法(至少根据本网站的说法)似乎是使用带有画布的SurfaceView。到目前为止,我的代码都是从我在互联网上找到的片段拼凑而成的,所以它崩溃了。无论如何,我把它包括在这里,希望它能让我了解我正在努力实现的目标: public class Main ex

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

我正在努力寻找实现这种应用程序的最有效方法。在尝试了许多其他方法(包括WebView、OpenLayers)之后,最好的方法(至少根据本网站的说法)似乎是使用带有画布的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);
    }
}
这是实现应用程序所需功能的最佳方法吗?或者有没有更好的方法,特别是如果我以后遇到问题,比如实现地图的可点击部分

我真的需要一个以前创造过类似东西的人的帮助,这样我就可以得到关于这个问题的思路,但我非常感谢任何帮助/指点/提示


谢谢

您的代码不太正确

如果需要创建自己的自定义视图(通过继承视图或SurfaceView),通常需要执行这种操作。在视图子类中,您需要重写onDraw(Canvas)方法,并使用Canvas方法之一在画布上绘制位图

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

SurfaceView和View的区别在于,在SurfaceView中,您可以直接从单独的线程进行绘制,这意味着您可以在其中组织某种渲染循环并从中进行绘制。它适用于简单的游戏和动画效果。我认为,为了绘制位图,这是一种过分的方法,而且对于视图的子类来说要简单得多


如果我是你,我会从和开始。

谢谢!这很有帮助!