簡體   English   中英

如何控制ListView的垂直滾動

[英]How to control ListView's vertical scroll

我在一個團隊中,該團隊正在為平板電腦開發一款類似於雜志的應用程序。
我們正在使用ListView來顯示一篇包含多個頁面的文章。
row包含大量數據,用於表示雜志的一頁。
一行在縱向模式下幾乎占據了整個屏幕,因此一行==一塊屏幕

截至目前,當用戶滾動整個ListView時,它的行為類似於普通ListView的行為-

  • 如果您滑動足夠快,它將快速滾動
  • 如果您緩慢滾動,則在手指停止垂直運動后滾動就會停止

我想要的是-

  • 無論用戶滾動/輕拂(在垂直方向上移動手指)有多快或多慢,都只應滾動一行。

有沒有一種方法可以控制ListView的滾動方式?

我搜索了很多文章,其中有很多文章建議如何滾動到頂部或特定位置,但是實際上沒有人告訴我滾動是如何發生的,以便我可以控制它。
我想念什么嗎?

好吧,您的問題僅限於ListView,我認為可以通過計算屏幕尺寸並因此對行為進行操作來實現,但是由於我不確定ListView的技術性。 如果可以實施,我可以為您提供指導:

1)ViewPager:我認為它更適合您當前的需求,您可以在此處找到詳細信息-http: //android-developers.blogspot.in/2011/08/horizo​​ntal-view-swiping-with-viewpager.html

要么

采取本頁上提到的更多自定義要求- 如何制作可在滑動/滑動視圖之間切換的Android視圖

2)膨脹和使用動畫:我本可以使用的另一種方法是在運行時膨脹頁面並對特定手勢做出反應,並在翻轉時集成動畫。

但是,如果不是必須使用ListViews,則使用ViewPager優於ListViews,AFAIT。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM