OK!在过去的几周里,我一直试图这样做,而且似乎无法找到一个很好的解决方案来实现我想要的目标。一直在尝试使用HorizontalScrollView,Gallery(不推荐使用)。
我现在正在研究RecycleView,因为我找到了这个方法.smoothScrollToPosition(),并认为这可能对我有帮助。
以下是我想要完成的事情的说明:
我还必须能够以编程方式创建relativelayouts
任何人都可以向我指出如何实现这一目标吗?是否有任何本地方式可以做到这一点?
编辑:在进一步了解@CommonsWare关于调查ViewPager的建议以及来自Dave Smith的第三篇文章的commonsware.com/blog/2012/08/20后,我认为这是要走的路。还没有将它改为我的使用,但看起来不错。我正在使用他的Github中的Dave Smiths样本:https://gist.github.com/devunwired/8cbe094bb7a783e37ad1
答案 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;
}
};
:)
这是最终输出示例的屏幕截图:
小心。