Java 使用比屏幕大得多的画布

Java 使用比屏幕大得多的画布,java,android,graphics,canvas,drawing,Java,Android,Graphics,Canvas,Drawing,我正在尝试在Android上绘制一个图形,我想知道绘制这些图形的最佳方法是什么。整个数据集可能相对较大(2k*2k点),在绘图中缩放和移动应该非常快。大多数情况下,当用户放大数据时,只会绘制一小部分数据 我现在的想法是将整个情节画在一块大画布上,但将其剪辑到屏幕上可见的部分,以便最终只画出该部分。我发现Android的2D绘图API有些混乱,我不确定这是否真的是一种可行的方法,以及我将如何执行它 因此,我的问题是: 在比屏幕大得多的画布上画图,并使用剪辑仅显示相关部分,这是一个好主意吗 我如何

我正在尝试在Android上绘制一个图形,我想知道绘制这些图形的最佳方法是什么。整个数据集可能相对较大(2k*2k点),在绘图中缩放和移动应该非常快。大多数情况下,当用户放大数据时,只会绘制一小部分数据

我现在的想法是将整个情节画在一块大画布上,但将其剪辑到屏幕上可见的部分,以便最终只画出该部分。我发现Android的2D绘图API有些混乱,我不确定这是否真的是一种可行的方法,以及我将如何执行它

因此,我的问题是:

  • 在比屏幕大得多的画布上画图,并使用剪辑仅显示相关部分,这是一个好主意吗
  • 我如何创建一个更大的画布,如何选择应该绘制哪些部分
画一张画是个好主意吗 画布比屏幕大得多 使用剪裁仅显示 相关部分

更好的问题可能是,你还有其他选择吗。有些人可能会认为这是一个坏主意,因为当内存与UI上发生的事情无关时,您将继续使用内存。然而,从我使用
画布的经验来看,我想你会发现这应该很好。现在,如果你想在内存中保留“5平方英里”的画布,你肯定要找到更好的方法来管理它

如何创建更大的画布和 我应该如何选择哪些零件 被抽签


我希望当用户通过覆盖
onTouchEvent
方法触摸屏幕时,您将创建自己的“滚动”方法。基本上,您需要跟踪起点X和Y,并在屏幕上移动
画布时跟踪该值。为了移动
画布
,有许多内置功能,如
平移
缩放
,您可以使用它们在X和Y方向移动
画布
,以及在用户放大或缩小时缩放它。

我认为在大位图上绘制二维等高线图不是一个好主意,因为您需要一个矢量型图形可以放大和缩小以保持清晰。只有图片可以缩小,但在位图中缩小时,图形会丢失细线或变形

正确的方法是用数学方法来完成这一切,并计算出应该为所需的位置和缩放绘制图形的哪一部分。对线条和文本使用抗锯齿油漆,图形将始终清晰且良好。。。
当用户缩小时,不应绘制某些项目,因为它们无法放入屏幕或会使屏幕混乱。因此,图形将始终针对缩放级别进行优化…

您应该从另一个方向开始。不要创建一个巨大的画布,你应该检测出你需要画的是哪一部分,然后只画那一部分

所以基本上你需要一些导航/滚动,你需要在内存中保持从起点的偏移量来计算你在哪里。使用偏移可以轻松地放大和缩小,因为只需将绘图缩放到屏幕上即可