如何滚动“无限”在Android的宽视野?(How to scroll “infinitely” w

2019-08-19 15:47发布

我琢磨如何滚动的“无限”,鳞片状,android系统控制的替代品。 简单的想法是重绘每卷动整个视图,但不知何故,它似​​乎并不像正确的方式。 这是可能的前手画的内容,但我不知道我应该怎么做广泛的观点摆在首位,并在用户滚动时会发生什么变化视图的结束? 我想我需要延长朝着那个方向的看法。

我应该去对编程添加(和删除)的视图块的线性布局? 这将是巨大的,听到的经验是在那里绘制关于这种长期滚动的自定义控制。

谢谢/埃里克

Answer 1:

如果你有使用适配器的数据列表/网格或任何工作,你可以使用CommonsWare并可以在这里写了一个最优秀的班级:

http://github.com/commonsguy/cwac-endless

它是专门用于此目的



Answer 2:

使用屏幕外缓冲自己的控件的大小。

在第一个做到这一点的简单方法。 绘制滚动到正确的位置,整个offscreenbuffer。 当准备BitBlt到实际屏幕。

如果这是太慢了,试图通过不重绘整个offscreenbuffer但通过使垂直分割优化它:(我只谈论一个水平滚动运动在这里,现在让概念更容易把握,但此方法适用于。 8方式滚动以及)

这是有点棘手来实现(这就是为什么我首先提出的简单的方法),但试着想象与图片的文件就可以了,你包的左侧周围,它粘到右侧(所以你得到一个管)。 这样,您就可以无限期地滚动纸(由围绕它旋转管的Y轴)。

同样,你可以做同样的屏幕外按图纸上的全部内容buffer.Prepare的屏幕外的缓冲区。

现在滚动到在2基本上分裂离屏缓冲器(由这个垂直分割(就像在将胶水是)的例子中的纸的方式)的权利。 假设你滚动10个像素的权利,你要做的就是:

  • 拆分(位于像素10)的右手侧复制到控制的像素0。 (宽度 - - (因此从(10,0)的整个区域高度):(0,0)
  • 然后,将分离的左手侧复制:像素0到10像素宽度10。 所以:(0,0) - (10,高度)(宽度-10,0)

在这之前重绘已被改变(在这种情况下,10个像素,因为我们滚动10个像素)的像素。 所有其它的像素仍然是相同的,并且也不需要重画。

你必须吸取这一点在纸上自己真正了解它。 这是与平台资源有限(手机等)的游戏开发很常见的技术。

在各个方向上的PS滚动可以在完全相同的方式来实现(虽然它更难得到正确的); ^)



Answer 3:

有点迟到了,但我想我会告诉你一个更简单的方法去:你只需要你的背景是视图的屏幕尺寸和大小,然后调用下面的代码(假设你延伸视图和重写的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);

    }



}


Answer 4:

怎么样在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);

}


文章来源: How to scroll “infinitely” wide view in Android?