【问题标题】:How to control ListView's vertical scroll如何控制ListView的垂直滚动
【发布时间】:2012-06-11 08:12:55
【问题描述】:

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

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

  • 如果你快速滑动,它会快速滚动
  • 如果您缓慢滚动,一旦手指停止垂直运动,滚动就会停止

我想要什么-

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

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

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

【问题讨论】:

    标签: android listview scroll android-listview


    【解决方案1】:

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

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

    获取本页提到的更多自定义要求的帮助 - How to make an Android view that flips between views on swipe/fling

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

    但如果使用 ListViews 对于您的要求不是强制性的,那么使用 ViewPager 将优于 ListViews,AFAIT。

    【讨论】:

      【解决方案2】:

      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();
          } 
      

      然后在你的 ListView 中添加一个 ontouchlistener 并滚动触摸:

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

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

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

        yourListView.smoothScrollToPosition(LIST_ITEM_INDEX);

      【讨论】:

      • 使用反射的坏主意
      猜你喜欢
      • 2020-09-22
      • 1970-01-01
      • 1970-01-01
      • 2020-02-14
      • 2017-05-17
      • 1970-01-01
      • 2012-05-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多