2012-06-11 197 views
1

我在一个团队,是构建应用程序的反应它像一本杂志的平板电脑。
我们使用ListView显示具有多页一文。
每个row包含了大量的数据,并用于表示一个杂志的页面。
一行需要差不多全在纵向模式屏幕,这样一排==一个屏幕如何控制ListView的垂直滚动

截至目前,当用户滚动这个全的ListView,它的行为方式正常的ListView会 -

  • 如果你轻弹速度不够快,它会快速滚动
  • 如果你慢慢滚动,滚动只要你停止手指

我want-

的垂直运动停止
  • 无论多么快或慢了用户滚动/笔触(使得在垂直方向上的手指移动),只有一个单列应该滚动。

有没有一种方法可以控制如何滚动ListView?

我搜索了很多,相当多的文章建议如何滚动到顶部或到特定位置,但没有人真正告诉滚动是如何发生的,这样我可以控制它。
我缺少的东西?

回答

-1

ListView中使用滚轮(OverScroller过去姜饼2.3),其具有私有访问。不知道这是否会帮助你,但它可以指引你在正确的方向。为了得到你想要的,你可以尝试以下的行为(我只测试了一个滚动型):

//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到uour ListView和滚动触摸起来:

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

的替代你上面的解决方案可以尝试以下方法:

  1. 添加ontouchListener到你的ListView
  2. 触摸起来:

    yourListView.smoothScrollToPosition(LIST_ITEM_INDEX);

+1

糟糕的想法使用反思 –

2

嗯,你的问题是具体限于ListView中,我认为可以通过计算屏幕大小,从而作用于行为来实现,但因为我不知道的ListView technicallity。我可以指导你,如果我已经实现了我会考虑使用:

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更好。