web-dev-qa-db-ja.com

Android水平スクロールビューはiPhone(ページング)のように動作します

Horizo​​ntalScrollView内にLinearLayoutがあります。内容はイメージです。スクロール中に、iPhoneのHSWに相当するものでページングオプションを設定するときと同じ動作を実現する必要があります(リストのスクロールは、リストのすべてのページで停止し、移動を続ける必要はありません)。

これはAndroidでどのように行われますか?この機能を自分で実装する必要がありますか、それとも設定する特定のプロパティまたはHSVのサブクラスを実装する必要がありますか?

29
Davide Vosti

だから、私の解決策は:

  1. OnTouchイベントをインターセプトし、ページを次のページに変更するか、現在のページを維持するかを計算します
  2. Horizo​​ntalScrollViewから継承し、computeScrollメソッドをオーバーライドします。

メソッドcomputeScrollは、リストを移動するために呼び出されます。デフォルトでは、特定の比率で減速するように実装されていると思います...このモーションは必要ないので、ボディを指定せずにオーバーライドするだけです。

イベントハンドラのコードは次のとおりです。

_scrollView.setOnTouchListener(new OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            if(event.getAction() == MotionEvent.ACTION_UP)
            {
                float currentPosition = _scrollView.getScrollX();
                float pagesCount = _horizontalBar.getChildCount();
                float pageLengthInPx = _horizontalBar.getMeasuredWidth()/pagesCount;
                float currentPage = currentPosition/pageLengthInPx;

                Boolean isBehindHalfScreen =  currentPage-(int)currentPage > 0.5;

                float edgePosition = 0;
                if(isBehindHalfScreen)
                {
                    edgePosition = (int)(currentPage+1)*pageLengthInPx;
                }
                else
                {
                    edgePosition = (int)currentPage*pageLengthInPx;
                }

                _scrollView.scrollTo((int)edgePosition, 0);
            }

            return false;
        }
    });

そして私の継承したHorizo​​ntalScrollView

@Override
    public void  computeScroll  (){
        return;
    }
13
Davide Vosti

私はここでニースの解決策に出会いました:

水平ページャー

これは、ここにあるコードのクリーンアップされたGitHubバージョンです。

リアルビュースイッチャー

画像で使用するのはやり過ぎのように思えるかもしれませんが、このソリューションでは、小さなトリックを使用して無限のページングを行うことができます(つまり、最初のページで最後のページに戻ることができ、最後のページで最初のページに進むことができます) )。また、不明な数のページを作成し、別の小さなトリックを使用してコンテンツを動的に生成することもできます。 2番目のリンクで私のコメントを参照してください ここ

私がこれをどのように達成したかの詳細については。

お役に立てれば。

20
aveyD

Android=)の新しい互換性パッケージ(リビジョン3)は、それを行うViewPagerを追加しました。

http://developer.Android.com/sdk/compatibility-library.html

15
Patrick Boos