我琢磨如何滚动的“无限”,鳞片状,android系统控制的替代品。 简单的想法是重绘每卷动整个视图,但不知何故,它似乎并不像正确的方式。 这是可能的前手画的内容,但我不知道我应该怎么做广泛的观点摆在首位,并在用户滚动时会发生什么变化视图的结束? 我想我需要延长朝着那个方向的看法。
我应该去对编程添加(和删除)的视图块的线性布局? 这将是巨大的,听到的经验是在那里绘制关于这种长期滚动的自定义控制。
谢谢/埃里克
我琢磨如何滚动的“无限”,鳞片状,android系统控制的替代品。 简单的想法是重绘每卷动整个视图,但不知何故,它似乎并不像正确的方式。 这是可能的前手画的内容,但我不知道我应该怎么做广泛的观点摆在首位,并在用户滚动时会发生什么变化视图的结束? 我想我需要延长朝着那个方向的看法。
我应该去对编程添加(和删除)的视图块的线性布局? 这将是巨大的,听到的经验是在那里绘制关于这种长期滚动的自定义控制。
谢谢/埃里克
如果你有使用适配器的数据列表/网格或任何工作,你可以使用CommonsWare并可以在这里写了一个最优秀的班级:
http://github.com/commonsguy/cwac-endless
它是专门用于此目的
使用屏幕外缓冲自己的控件的大小。
在第一个做到这一点的简单方法。 绘制滚动到正确的位置,整个offscreenbuffer。 当准备BitBlt到实际屏幕。
如果这是太慢了,试图通过不重绘整个offscreenbuffer但通过使垂直分割优化它:(我只谈论一个水平滚动运动在这里,现在让概念更容易把握,但此方法适用于。 8方式滚动以及)
这是有点棘手来实现(这就是为什么我首先提出的简单的方法),但试着想象与图片的文件就可以了,你包的左侧周围,它粘到右侧(所以你得到一个管)。 这样,您就可以无限期地滚动纸(由围绕它旋转管的Y轴)。
同样,你可以做同样的屏幕外按图纸上的全部内容buffer.Prepare的屏幕外的缓冲区。
现在滚动到在2基本上分裂离屏缓冲器(由这个垂直分割(就像在将胶水是)的例子中的纸的方式)的权利。 假设你滚动10个像素的权利,你要做的就是:
在这之前重绘已被改变(在这种情况下,10个像素,因为我们滚动10个像素)的像素。 所有其它的像素仍然是相同的,并且也不需要重画。
你必须吸取这一点在纸上自己真正了解它。 这是与平台资源有限(手机等)的游戏开发很常见的技术。
在各个方向上的PS滚动可以在完全相同的方式来实现(虽然它更难得到正确的); ^)
有点迟到了,但我想我会告诉你一个更简单的方法去:你只需要你的背景是视图的屏幕尺寸和大小,然后调用下面的代码(假设你延伸视图和重写的onDraw):
private void drawEndlessBackground(Canvas canvas, float left, float top) {
float modLeft = left % screenWidth;
canvas.drawBitmap(backgroundImage, modLeft, top, null);
if (left < 0) {
canvas.drawBitmap(backgroundImage, modLeft + screenWidth, top, null);
} else {
canvas.drawBitmap(backgroundImage, modLeft - screenWidth, top, null);
}
}
怎么样在XML? 私人无效drawEndlessBackground(帆布帆布,左浮动,浮动顶部){
float modLeft = left % screenWidth;
canvas.drawBitmap(backgroundImage, modLeft, top, null);
if (left < 0) {
canvas.drawBitmap(backgroundImage, modLeft + screenWidth, top, null);
} else {
canvas.drawBitmap(backgroundImage, modLeft - screenWidth, top, null);
}