Android-是否有可能制作无限画布?
目前我正在做的应用程序允许用户绘制。简单想想,只要扩展Canvas类,大部分事情就完成了 这是我最初的想法和想法。但是由于画布相当小,因为这只是用户在屏幕上看到的,所以没有太多可能的空间来绘制。浏览文档时,我找到了允许我移动画布的Android-是否有可能制作无限画布?,android,android-canvas,Android,Android Canvas,目前我正在做的应用程序允许用户绘制。简单想想,只要扩展Canvas类,大部分事情就完成了 这是我最初的想法和想法。但是由于画布相当小,因为这只是用户在屏幕上看到的,所以没有太多可能的空间来绘制。浏览文档时,我找到了允许我移动画布的translate()方法。我发现当我移动它时,会有一些空白,就像你移动一张纸一样。我明白这是完全正常的,就像我之前说过的——画布只是“屏幕” 我的问题是-有没有可能制作出类似于无限画布的东西,这样你就可以画出一幅巨大的画并移动所有东西? 在提出这个问题之前,我想了两件
translate()
方法。我发现当我移动它时,会有一些空白,就像你移动一张纸一样。我明白这是完全正常的,就像我之前说过的——画布只是“屏幕”
我的问题是-有没有可能制作出类似于无限画布的东西,这样你就可以画出一幅巨大的画并移动所有东西?
在提出这个问题之前,我想了两件事,如何做到这一点:
列表视图中类似的操作。只有屏幕上的视图以及一个before和一个after加载到内存中,其余视图在需要时动态上载。我认为这是实现这一目标的最佳选择
- 用户有机会只画圆和矩形,其中一些(约80%)在画布上有可绘制(位图)的
- 我假设所有屏幕上最多有500-800个矩形或圆形
TouchListener
、ScaleListener
、DoubleTapListener
)。当谈到缩放时,还有另一件事必须关注,并与画布的“无限”相联系。当用户缩小屏幕时,屏幕或不可见的“邻居”上更精确的对象应该以适当的比例显示,就像在现实生活中缩小相机一样
我刚刚意识到的另一件事是在小的缩放级别上画图的可能性——也就是在两个或三个屏幕上,然后放大——我想它应该剪切并重新计算它作为一个较小的部分
我希望至少从API 10支持设备,而不仅仅是高端设备
关于时间的问题是最关键的。我希望一切尽可能平滑,这样用户就不会知道每次都在创建新的画布。我认为这取决于很多因素:
screenObj.left=obj.left*transFactor-offsetX;
screenObj.right=obj.right*transFactor-offsetX;
screenObj.top=obj.top*transFactor-offsetY;
screenObj.bottom=obj.bottom*transFactor-offsetY;
//draw screenObj
以下是我的电影预订应用程序的屏幕截图:
下部窗口显示电影院的所有座位,上部窗口是同一影院的放大视图。它们被实现为同一SurfaceView类的两个实例,除了用户输入处理之外,唯一的区别是上面的一个应用了上述“翻译因子”
我假设所有屏幕上最多有500-800个矩形
或圆圈
其实还不算太坏。阅读您的编辑,我认为一个潜在的更大问题是,如果用户将大量对象添加到画布的同一部分。那么,如果你只画实际显示的对象,而不画其他东西,那就没关系了——因为GPU的填充率是饱和的,所以你仍然会得到很差的FPS
因此,实际上有两个潜在的问题来源: