1

私は、雑誌のように反応するタブレット用のアプリを構築しているチームに所属しています。複数のページを持つ 1 つの記事を表示するために
使用しています。 それぞれに多くのデータが含まれており、雑誌のページを表すために使用されます。 縦モードでは 1 行で画面のほぼ全体を占めるため、1 行 == 1 画面ListView
row

現在、ユーザーがこの ListView 全体をスクロールすると、通常の ListView と同じように動作します。

  • 十分に速くフリックすると、速くスクロールします
  • ゆっくりスクロールすると、指の垂直方向の動きを止めるとすぐにスクロールが停止します

私が欲しいもの -

  • ユーザーのスクロール/フリック (垂直方向の指の動き) がどれほど速くても遅くても、1 行だけをスクロールする必要があります。

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 よりも優れています。

于 2012-06-11T09:23:32.927 に答える
-1

ListView uses a Scroller (OverScroller past GingerBread 2.3) which has private access. Not sure if this will help you out but it can point you in the right direction. To get the behaviour you want you can try the following(I have only tested this on a 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();
    } 

Then add an ontouchlistener to uour ListView and scroll on touch up:

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

An alternative to the solution above you can try the following:

  1. Add an ontouchListener to your ListView
  2. on touch up:

    yourListView.smoothScrollToPosition(LIST_ITEM_INDEX);

于 2012-06-11T08:42:41.947 に答える