2012-01-12 14 views
40

ViewPagerを使用すると同時に2ページを表示する可能性はありますか?私はエッジ効果を探しているのではなく、むしろ二つのために同時にフルページを探しています。同時に複数のページをViewPagerで表示

ありがとうございます。

+0

私はあなたasking..canているものはかなりわからないんだけどもう少し説明してください。 – Cody

+0

私は、ViewPagerに、ブックのように2つの利用可能なページを並べて表示させたいと考えています。 –

+0

2つのフラグメントを使用してページを左右に並べることはできますか?そのただのアイデア...私を責めないでください..... – NIPHIN

答えて

-2

ビューポケットベルの制限では可能ではないと思います。ユーザーは、一度に1ページだけを見ることができます。フラグメントを使用して何かを動作させることができ、2つのViewPagerフラグメントを並べて使用して、ボタンを使用して実装したいページを外に出すことができますが、コードは非常に複雑になることがあります。

ViewFlipperのようなものを試すことができます。ここでは、さらに多くのカスタマイズ(アニメーションを含む)ができます。

これが役に立ちます。

64

対応するPagerAdaptergetPageWidthメソッドをご覧ください。上書きして戻る0.8fは、すべての子ページがViewPagerの幅の80%にしかならないようにします。

さらに詳しい情報: http://developer.android.com/reference/android/support/v4/view/PagerAdapter.html#getPageWidth(int)

+0

そのテクニックの問題は、余分なマージンが表示され、Viewpagerの下に奇妙な空白スペースが追加されています – elgui

+0

私はこれが最良の答えだと思います! –

+0

これは、ビューページャにちらつき効果を追加します。私はまだスワイプして、ビューが奇妙なちらつきを見せることがあります。 – pyus13

5

that blog entryを参照してください。
PagerContainerテクニックが私の問題を解決しました。

EDIT:
私は同じ答えを見つけました。
How to migrate from Gallery to HorizontalScrollView & ViewPager?

+1

ようこそStackOverflowへ!そのブログ記事の抜粋をあなたの答えに追加したいのですか?そうすれば、リンクが消えてもまだ役立つでしょうか? –

+0

@ S.L.Barthあなたの助けに感謝します。私は自分の答えを変更しました。 – kaw

2

この問題を解決するには、PagerAdapterクラスのgetPageWidthを使用します。

あなたのJARが最新 .Since以前ViewPagerが同時に複数のページをサポートしていませんでしたされているかどうかについて確認してください。

公共フロートgetPageWidth(){

リターン0.4F;(あなたがページごとにフルスクリーン.FOR、それを選択することができますが、1Fを与える必要があります) }

30

私より最新の回答を参照してください。ここでは:Can ViewPager have multiple views in per page?

私は、おそらくViewPagerのマイナスマージンを指定することによってさらに簡単な解決策を発見しました。この質問は、特にここではいくつかの答えが提案する、エッジ効果なしソリューションが求められますが

https://github.com/Pixplicity/MultiViewPager

:私はあなたを見てみたいことがありGitHubの上MultiViewPagerプロジェクトを、作成しましたkawの提案などCommonsWareによる回避策。

タッチ処理とハードウェアアクセラレーションには、さまざまな問題があります。よりシンプルかつエレガントなソリューション、私の意見では、ViewPager用負のマージンを指定することです:私はその後、私のdimens.xmlでこのディメンションを指定

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

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

ページの重複を補償するために、 dimens.xmlで再び

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

:各ページのコンテンツビューには、反対の余裕を持って

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

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

私たちは、このin the Dutch newspaper app De Telegraaf Krant実装:あなたは上getPageWidth()メソッドをオーバーライドする必要が

Phone example in De Telegraaf KrantTablet example

+0

私はあなたのソリューションが大好きです。シンプルでエレガントな...!ありがとう。私は 'PageTransformer'を使ってこれを達成しようとしていました。 –

+2

は私のために働いた。2番目の次のビューの遅延を避けるために、キャッシングを2に改善するためにsetOffScreenPageLimit(2)を追加する必要もあります。 – Giorgio

+0

前の注意:ViewPager.setOffscreenPageLimit(2)は誰でも投げ捨てられます。 – fooser

11

をビューページのアダプタ。例:

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

アダプタでコードを試してみてください。

+2

これは@ Markus-Wörzの答えとよく似ていますか? – bummi

1

あなたのレイアウトファイルを作成します。my_layout.xml:

<?xml version="1.0" encoding="utf-8"?> 
<layout xmlns:android="http://schemas.android.com/apk/res/android"> 
<FrameLayout 
    android:id="@+id/pager_container" 
    android:layout_width="match_parent" 
    android:layout_height="240dp" 
    android:clipChildren="false"> 

    <android.support.v4.view.ViewPager 
     android:id="@+id/pager" 
     android:layout_width="200dp" 
     android:clipToPadding="false" 
     android:layout_height="200dp" 
     android:layout_marginLeft="70dp" 
     android:layout_marginRight="70dp" 
     android:layout_gravity="center" /> 
</FrameLayout> 
</layout> 

viewpagerは、あなたがあなたのページになりたいと同じくらい小さいです。 android:clipToPadding = "false"を指定すると、ページャーの外側のページも表示されます。しかし、今viewpager外にドラッグすると、これは、ページャ・コンテナからのタッチを選ぶとページャへのそれらを渡すことによって改善することができる効果がありません:

MyLayoutBinding binding = DataBindingUtil.<MyLayoutBinding>inflate(layoutInflater, R.layout.my_layout, parent, false) 
binding.pager.setOffscreenPageLimit(3); 
binding.pager.setPageMargin(15); 
binding.pagerContainer.setOnTouchListener(new View.OnTouchListener() { 
     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      return chatCollectionLayoutBinding.pager.onTouchEvent(event); 
     } 
}); 
0

それはViewpagerの項目のレイアウトに着ることができます。一度に2ページを必要とすると仮定します。

これはアイテムのレイアウト(photo_slider_item.xml)です:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" style="@style/photosSliderItem"> 
     <ImageView android:id="@id/photoBox1" style="@style/photoBox"/> 
     <ImageView android:id="@id/photoBox2" style="@style/photoBox"/> 
    </LinearLayout> 

そして、あなたのPagerAdapter中:

@Override 
public View instantiateItem(ViewGroup container, int position){ 
    View sliderItem = LayoutInflater.from(container.getContext()).inflate(photo_slider_item, container, false); 
    ImageView photoBox1 = (ImageView) sliderItem.findViewById(R.id.photoBox1); 
    ImageView photoBox2 = (ImageView) sliderItem.findViewById(R.id.photoBox2); 
    photoBox1.setImageResource(photosIds[position]); 
    if(position < photosIds.length-1){ 
     photoBox2.setImageResource(photosIds[position+1]); 
    } else {photoBox2.setImageResource(photosIds[0]);} 
    container.addView(sliderItem); 
    return sliderItem; 
} 
関連する問題