我小时候有一个 custom HorizontalScrollView
,LinearLayout
在LinearLayout
.
当我向右滚动时,我需要再添加 3 个子视图LinearLayout
,然后删除前三个子视图,这样一次只存在 9 个子视图。
我们添加了基于视图 ID 的检测点,其方式是 if the currentViewId > lastChildId - 0.33f * viewSizeLimit
where viewSizeLimit = 9
。如果这是有效的,那就是我们从LinearLayout
.
我遇到的第一个问题是,当我从 中删除视图时LinearLayout
,孩子会向左移动。因此,如果currentViewId = 7
, 和当前视图在检测区域上,那么我们将 3 个视图添加到末尾,并从前面删除 3 个视图。所以现在currentViewId = 4
由于转变。
我们添加了scrollBy
的方法HorizontalScrollView
来补偿这种视图偏移,如果滚动不是那么快,效果很好。
这是日志中的一个示例:
07-01 17:01:34.304: INFO/GTA(2476): currentViewId: 6
07-01 17:01:34.304: INFO/GTA(2476): Scroll Distance: 8
07-01 17:01:34.373: INFO/GTA(2476): currentViewId: 6
07-01 17:01:34.383: INFO/GTA(2476): Scroll Distance: 41
07-01 17:01:34.463: INFO/GTA(2476): currentViewId: 7
07-01 17:01:34.463: INFO/GTA(2476): Scroll Distance: 25
07-01 17:01:34.633: INFO/GTA(2476): Added new views to the end
07-01 17:01:34.643: INFO/GTA(2476): currentViewId: 4
07-01 17:01:34.653: INFO/GTA(2476): Scroll Distance: -1440
07-01 17:01:34.653: INFO/GTA(2476): Head View ID: 4 | Tail View ID: 12
07-01 17:01:34.673: INFO/GTA(2476): currentViewId: 7
07-01 17:01:34.673: INFO/GTA(2476): Scroll Distance: 22
07-01 17:01:34.733: INFO/GTA(2476): currentViewId: 7
这是快速滚动/翻转滚动视图时的日志:
07-01 17:03:48.633: INFO/GTA(2476): currentViewId: 6
07-01 17:03:48.643: INFO/GTA(2476): Scroll Distance: 158
07-01 17:03:48.693: INFO/GTA(2476): currentViewId: 6
07-01 17:03:48.704: INFO/GTA(2476): Scroll Distance: 124
07-01 17:03:48.753: INFO/GTA(2476): currentViewId: 7
07-01 17:03:48.753: INFO/GTA(2476): Scroll Distance: 114
07-01 17:03:48.914: INFO/GTA(2476): Added new views to the end
07-01 17:03:48.914: INFO/GTA(2476): currentViewId: 4
07-01 17:03:48.914: INFO/GTA(2476): Scroll Distance: -1440
07-01 17:03:48.914: INFO/GTA(2476): Head View ID: 4 | Tail View ID: 12
07-01 17:03:48.974: INFO/GTA(2476): currentViewId: 10
07-01 17:03:48.974: INFO/GTA(2476): Scroll Distance: 1843
07-01 17:03:49.194: INFO/GTA(2476): Added new views to the end
07-01 17:03:49.204: INFO/GTA(2476): currentViewId: 7
07-01 17:03:49.204: INFO/GTA(2476): Scroll Distance: -1440
07-01 17:03:49.204: INFO/GTA(2476): Head View ID: 7 | Tail View ID: 15
07-01 17:03:49.253: INFO/GTA(2476): currentViewId: 14
07-01 17:03:49.264: INFO/GTA(2476): Scroll Distance: 1866
07-01 17:03:49.403: INFO/GTA(2476): Added new views to the end
07-01 17:03:49.414: INFO/GTA(2476): currentViewId: 11
07-01 17:03:49.414: INFO/GTA(2476): Scroll Distance: -1440
07-01 17:03:49.414: INFO/GTA(2476): Head View ID: 10 | Tail View ID: 18
07-01 17:03:49.463: INFO/GTA(2476): currentViewId: 18
07-01 17:03:49.463: INFO/GTA(2476): Scroll Distance: 1551
07-01 17:03:49.703: INFO/GTA(2476): Added new views to the end
07-01 17:03:49.713: INFO/GTA(2476): currentViewId: 15
07-01 17:03:49.713: INFO/GTA(2476): Scroll Distance: -1440
07-01 17:03:49.713: INFO/GTA(2476): Head View ID: 13 | Tail View ID: 21
从日志中可以看出,这些HorizontalScrollView
卷轴本身的数量绝对是巨大的(即1843年、1866年、1551年)。-1440
我们看到的值是scrollBy
我们为设置在视口中可见的正确视图而添加的补偿。
所以现在的问题是我似乎无法找出为什么HorizontalScrollView
卷轴本身会如此大的距离。出现这种情况有什么原因吗?
除了使用 a 之外,还有没有更好的方法来实现这一点HorizontalScrollView
?
我应该考虑为此使用游戏引擎吗?
谢谢。