如何创建一个水平滚动列表,其中包含对中心的捕捉效果

时间:2015-05-21 12:41:36

标签: android android-scrollview horizontalscrollview swipe-gesture android-relativelayout

OK!在过去的几周里,我一直试图这样做,而且似乎无法找到一个很好的解决方案来实现我想要的目标。一直在尝试使用Horizo​​ntalScrollView,Gallery(不推荐使用)。

我现在正在研究RecycleView,因为我找到了这个方法.smoothScrollToPosition(),并认为这可能对我有帮助。

以下是我想要完成的事情的说明:

enter image description here

我还必须能够以编程方式创建relativelayouts

任何人都可以向我指出如何实现这一目标吗?是否有任何本地方式可以做到这一点?

编辑:在进一步了解@CommonsWare关于调查ViewPager的建议以及来自Dave Smith的第三篇文章的commonsware.com/blog/2012/08/20后,我认为这是要走的路。还没有将它改为我的使用,但看起来不错。

我正在使用他的Github中的Dave Smiths样本:https://gist.github.com/devunwired/8cbe094bb7a783e37ad1

1 个答案:

答案 0 :(得分:4)

不要使用这种方法,它会占用大量内存(如果在某些时候你需要扩展到更通用的解决方案),因为你必须保持提升的ViewPager页数({ {1}})在记忆中。我有同样的挑战,我用HorizontalListView完成了这个。

所以你需要创建一个Fragment来添加“stubs”Adapter以获得第一个或最后一个(可能更多取决于所需的可见视图)同时)在屏幕中居中,因为这是View。 对于捕捉效果,您可以使用类似的东西(所有项目都需要具有相同的尺寸):

ListView

这种方法不仅使用更少的内存,而且它在子视图的数量上是通用的,它更平滑,所有元素都是可点击的(不仅是居中的)......好吧它是View.OnTouchListener hListViewsOnTouchListener = new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { if (event.getAction() == MotionEvent.ACTION_UP && v instanceof HListView) { View c = ((HListView) v).getChildAt(0); int posToGo = Math.abs(c.getX()) < c.getWidth() / 2 ? ((HListView) v).getFirstVisiblePosition() : ((HListView) v).getFirstVisiblePosition() + 1; ((HListView) v).smoothScrollToPositionFromLeft(posToGo, 0); } return false; } }; :)
这是最终输出示例的屏幕截图:
enter image description here enter image description here enter image description here

小心。