1

我所在的团队正在为平板电脑构建一个应用程序,该应用程序的反应就像一本杂志。
我们ListView用来显示一篇有多个页面的文章。
每一个都row包含很多数据,用来表示杂志的一页。
在纵向模式下,一排几乎占据整个屏幕,所以一排 == 一屏

到目前为止,当用户滚动整个 ListView 时,它的行为方式与普通 ListView 的行为方式相同 -

  • 如果你轻弹得足够快,它会快速滚动
  • 如果您缓慢滚动,一旦您停止手指的垂直运动,滚动就会停止

我想要的是-

  • 无论用户滚动/轻弹(使手指在垂直方向上移动)多快或多慢,都应该只滚动一行。

有没有办法控制 ListView 的滚动方式?

我搜索了很多,很多文章建议如何滚动到顶部或特定位置,但没有人真正说明滚动是如何发生的,以便我可以控制它。
我错过了什么吗?

4

2 回答 2

2

好吧,您的问题仅限于 ListView,我认为可以通过计算屏幕尺寸并因此对行为采取行动来实现,但因为我不确定 ListView 的技术性。我可以指导你,如果我会实施我会使用:

1)ViewPager:我认为更适合您当前的要求,您可以在此处找到详细信息 - http://android-developers.blogspot.in/2011/08/horizo ​​ntal-view-swiping-with-viewpager.html

或者

获取本页中提到的更多自定义要求的帮助 - 如何制作在滑动/翻动视图之间翻转的 Android 视图

2)充气和使用动画:我可以使用的其他方法是在运行时充气页面并对特定手势做出反应,并在翻转时集成动画。

但是如果使用 ListViews 对于您的要求不是强制性的,那么使用 ViewPager 会比 ListViews、AFAIT 更好。

于 2012-06-11T09:23:32.927 回答
-1

ListView 使用具有私有访问权限的 Scroller(超过 GingerBread 2.3 的 OverScroller)。不确定这是否会对您有所帮助,但它可以为您指明正确的方向。要获得您想要的行为,您可以尝试以下操作(我只在 ScrollView 上对此进行了测试):

//Replace the scroller with your own

Field mScroller;
    try {
        mScroller = ListView.class.getDeclaredField("mScroller");
        mScroller.setAccessible(true); 

        scroll = new OverScroller(mContext, new DecelerateInterpolator(DECELERATE_AMOUNT));
        mScroller.set(yourListView, scroll);

    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } 

然后将 ontouchlistener 添加到您的 ListView 并滚动触摸:

mScroller.startScroll(0, startY, 0, distanceToNextPage, 500);

您可以尝试以下解决方案的替代方案:

  1. 将 ontouchListener 添加到您的 ListView
  2. 修饰:

    yourListView.smoothScrollToPosition(LIST_ITEM_INDEX);

于 2012-06-11T08:42:41.947 回答