gpt4 book ai didi

android - 在 Surfaceview 的 Canvas 上显示位图

转载 作者:行者123 更新时间:2023-11-29 00:31:11 27 4
gpt4 key购买 nike

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

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

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

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

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

谢谢

最佳答案

您的代码并不正确。

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

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

SurfaceView 和 View 之间的区别在于,在 SurfaceView 中,您可以直接从单独的线程中绘制,这意味着您可以在那里组织某种渲染循环并从中绘制。它适用于简单的游戏和动画效果。我认为,出于绘制位图的目的,将 View 子类化是一种矫枉过正的做法。

我将从 this 开始和 this ,如果我是你。

关于android - 在 Surfaceview 的 Canvas 上显示位图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15616724/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com