pageradapter - viewpager android reference
ViewPagerはページごとに複数のビューを持つことができますか? (5)
Mark Murphyには、この問題に対処する興味深いブログ記事があります 。 私はこのスレッドで独自のソリューションを使用して終了しましたが、Dave Smithのコードを見てみる価値があります。
警告! このアプローチをとる前に、このポストの最後と以下のコメントの両方に記載されているこのアプローチの非常に深刻な問題に注意してください。
あなたはこれで終わるでしょう:
これは、 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とHorizontal Scroll Viewを試した後、私はView Pagerが必要なものをやっているが、小さなものは1つ欠けていることがわかった。 ビューページャには1ページに複数のビューがありますか?
View Pagerはスワイプ1つのビュー/ページしか表示しないことはわかっています。 私は私のビューの幅を制限することができますか?
例:3つのビューがあり、画面にビュー1とビュー2が表示されるようにしたいので、ユーザーはもっと多くのコンテンツがあるので、ビュー2にスワイプすることができます。
|view 1|view 2|view 3|
|screen |
ViewPagerの負のマージンを指定することで、おそらくもっと簡単な解決策であることがわかりました。 私はGitHub上で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
次元の次元の半分であることに注意してください。)
同じ画面に複数のページを表示することは可能です。 方法の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枚以上の画像を意味します。