pageradapter - viewpager android reference




ViewPagerはページごとに複数のビューを持つことができますか? (5)

Mark Murphyには、この問題に対処する興味深いブログ記事あります 。 私はこのスレッドで独自のソリューションを使用して終了しましたが、Dave Smithのコードを見てみる価値があります。

https://gist.github.com/8cbe094bb7a783e37ad1/

警告! このアプローチをとる前に、このポストの最後と以下のコメントの両方に記載されているこのアプローチの非常に深刻な問題に注意してください。

あなたはこれで終わるでしょう:

これは、 ViewPagerのサブクラスにFrameLayoutし、特定のサイズに設定し、 setClipChildren(false)を呼び出すことによって効果的に機能します。 これにより、AndroidがViewPagerの境界を超えてビューをクリッピングするのをViewPagerことができ、視覚的に達成します。

XMLでは、非常に簡単です:

<com.example.pagercontainer.PagerContainer
    android:id="@+id/pager_container"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="#CCC">
    <android.support.v4.view.ViewPager
        android:layout_width="150dp"
        android:layout_height="100dp"
        android:layout_gravity="center_horizontal" />
</com.example.pagercontainer.PagerContainer>

ViewPager外部からのタッチイベントを処理するための小さなコードを追加し、スクロール時に表示を無効にして、完了しました。

つまり、これは大変効果的ですが、私は、 ViewPager setCurrentPage()を呼び出すときに、このかなり簡単な構成では解決されないエッジケースがあることにViewPager 。 私がこれを解決するために見つけることができる唯一の方法は、 ViewPager自体をサブクラスinvalidate()invalidate()関数でPagerContainerも無効にすることPagerContainer

GalleryとHorizo​​ntal Scroll Viewを試した後、私はView Pagerが必要なものをやっているが、小さなものは1つ欠けていることがわかった。 ビューページャには1ページに複数のビューがありますか?

View Pagerはスワイプ1つのビュー/ページしか表示しないことはわかっています。 私は私のビューの幅を制限することができますか?

例:3つのビューがあり、画面にビュー1とビュー2が表示されるようにしたいので、ユーザーはもっと多くのコンテンツがあるので、ビュー2にスワイプすることができます。

|view 1|view 2|view 3|
|screen   |

ViewPagerの負のマージンを指定することで、おそらくもっと簡単な解決策であることがわかりました。 私はGitHub上でMultiViewPagerプロジェクトを作成しました。このプロジェクトは以下を参照してください。

https://github.com/Pixplicity/MultiViewPager

MultiViewPagerでは、ディメンションを指定するための子ビューが必要ですが、原理はページマージンを設定することを中心に行われます。

ViewPager.setPageMargin(
    getResources().getDimensionPixelOffset(R.dimen.viewpager_margin));

私はこの次元を私のdimens.xml指定しdimens.xml

<dimen name="viewpager_margin">-64dp</dimen>

ページの重なりを補うために、各ページのコンテンツビューには反対の余白があります。

android:layout_marginLeft="@dimen/viewpager_margin_fix"
android:layout_marginRight="@dimen/viewpager_margin_fix"

再びdimens.xml

<dimen name="viewpager_margin_fix">32dp</dimen>

viewpager_margin_fix次元は、絶対のviewpager_margin次元の次元の半分であることに注意してください。)

これをオランダの新聞アプリDe Telegraaf Krantに実装しました


同じ画面に複数のページを表示することは可能です。 方法の1つは、PAgerAdapterのgetPageWidth()メソッドをオーバーライドすることです。 getPageWidth()は、ページが占めるべきViewPagerの幅を示す0と1の間の浮動小数点数を返します。 デフォルトでは1に設定されていますので、希望の幅に変更することができます。 これについてはこちらgithubプロジェクトを ご覧ください


私は一度に3ページ(以前、現在および次のページ)を表示するために必要な唯一の違いと同じ問題を抱えていました。 私はそれを見つけたと思う最高のソリューションのための本当に長い研究の後。 このソリューションは、ここでは答えのいくつかを組み合わせたものです。

@Paul Lammertsmaのanswerは、Mark MurphyのブログにあるDave Smithのコードがこのソリューションの基礎であると指摘しています。 私の唯一の問題は、 ViewPagerがxmlファイルで指定したサイズのために画面の上部にあることでした。

 android:layout_width="150dp"
 android:layout_height="100dp"

私はスクリーンの上に広がる何かを探していたので、私の目的にはうまくいかなかった。 だから私はあなたがここに見ることができるように内容を包むように変更した:

  <com.example.nutrino_assignment.PagerContainer
    android:id="@+id/pager_container"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#CCC">
    <android.support.v4.view.ViewPager
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center" />
  </com.example.nutrino_assignment.PagerContainer>

チュートリアルで何をしようとしていたかの影響をすべて失った。 @ androのanswerを使って、私は一度に1ページ以上を表示することができました:ちょうど2! 現在と次のもの。 次のようにオーバーライドしました:

        @Override 
    public float getPageWidth(int position) {
        return(0.9f); 
    }

それは私が必要としていたほとんどでした...(私があなたが求めていたもののために十分だとは思っていますが)しかし、私が必要とされていたもののようなものを必要とするかもしれない人たちのために:ソリューションの最後の部分については、再び@Paul Lammertsmaによって。 Dave Smithのコードでは、次の行をonCreateメソッドで見つけることができます:

   //A little space between pages
    pager.setPageMargin(15);

私はそれを次のように置き換えた:

   //A little space between pages
    pager.setPageMargin(-64);

今すぐ最初のページに見える:

|view 1|view 2|view 3|
|screen   |

2日目は次のようになります:

|view 1|view 2|view 3|
     |screen    |

誰かを助けることを願っています! 私はそれの2日のように無駄に...幸運。


viewPager.setPageMargin(-18);// adjust accordingly ,-means less gap

イメージアダプター

private class ImagePagerAdapter2 extends PagerAdapter {
    private int[] mImages = new int[] {

            R.drawable.add1,
            R.drawable.add3,
            R.drawable.add4,
            R.drawable.add2,
    };
    @Override
    public float getPageWidth(int position) {
        return .3f;
    }

戻り値を調整する... lesserはより多くの画像を意味します...... 0.3は一度に3枚以上の画像を意味します。







android-viewpager