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

The*_*ude 10 android horizontalscrollview android-scrollview swipe-gesture android-relativelayout

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

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

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

在此输入图像描述

我还必须能够以编程方式创建相对布局

任何人都可以向我指出如何实现这一目标吗?有没有本土的方法呢?

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

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

Gui*_*lhE 4

不要使用这种方法,它会使用大量内存(如果在某些时候您需要扩展到更通用的解决方案),因为您必须在内存中保留大量的ViewPager页面(Fragment)。我遇到了同样的挑战,我已经使用Horizo​​ntalListView完成了这个任务。

因此,您需要创建一个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;
            }
        };
Run Code Online (Sandbox Code Playgroud)

这种方法不仅使用更少的内存,而且在子视图数量方面是通用的,它更平滑,并且所有元素都是可点击的(不仅仅是居中的元素)......好吧,这是一个ListView:)
这是最终输出示例的屏幕截图:
在此输入图像描述 在此输入图像描述 在此输入图像描述

小心。