使用比屏幕大得多的画布

时间:2011-02-11 12:58:32

标签: java android graphics canvas drawing

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

我现在的想法是将整个绘图绘制到一个大画布上,但将其剪切到屏幕上可见的部分,以便最终只绘制那部分。我发现Android的2D绘图API有些令人困惑,我不确定这是否真的是一种可行的方法,以及我将如何执行它。

所以我的问题是:

  • 绘制比屏幕大得多的画布并使用剪裁仅显示相关部分是一个好主意吗?
  • 如何创建更大的画布以及如何选择应绘制哪些部分?

3 个答案:

答案 0 :(得分:2)

你应该从另一个方向开始。你不应该创建一个巨大的画布,而应该检测你需要绘制的绘图的哪个部分,然后只绘制它。

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

答案 1 :(得分:1)

  

吸引一个人是个好主意   帆布比屏幕大得多   使用剪辑仅显示   相关部分?

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

  

如何创建更大的画布和   我该如何选择应该选择的部分   被画出来了?

当用户通过覆盖onTouchEvent方法触摸屏幕时,我希望您将创建自己的“滚动”方法。基本上您需要跟踪起点X和Y,并在屏幕上移动Canvas时跟踪该值。为了移动Canvas,您可以使用translatescale这样的内置内容来移动X和Y中的Canvas以及缩放比例当用户放大或缩小时。

答案 2 :(得分:1)

我不认为在大位图上绘制2D轮廓图是个好主意,因为你需要一个矢量类型的图形来放大和缩小以保持清晰。只有图片可以缩小比例,但图形将丢失细线或在位图缩小时变形。

正确的方法是以数学方式完成所有操作并计算应该为所需位置和缩放绘制图形的哪个部分。使用anti_alias绘制线条和文本,图形总是很清晰,很好...... 当用户缩小时,不应绘制某些项目,因为它们无法放入屏幕或会使其混乱。因此,图表将始终针对缩放级别进行优化...