【问题标题】:Displaying a Bitmap on Canvas in Surfaceview在 Surfaceview 的画布上显示位图
【发布时间】:2013-03-15 01:08:20
【问题描述】:

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

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

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);
    }
}

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

我真的需要以前创建过类似东西的人的帮助,这样我才能就这个问题得到思路,但我非常感谢任何帮助/指针/提示!

谢谢

【问题讨论】:

    标签: android canvas bitmap surfaceview


    【解决方案1】:

    你的代码并不正确。

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

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

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

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

    【讨论】:

    • 谢谢!这很有帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多