2016-08-09 14 views
2

私は2つのViewPagerを持っています。今クライアントは、ViewPager(3つのListView)を下に展開して、上部にViewPagerをオーバーレイする可能性を追加したいと考えています。私がViewPagerの両方をScrollViewListViewの底に入れたら、ViewPagerは動作を停止しました。最初にRelativeLayoutに入れて、すべてのListViewに上部のパディングを追加し、背景をnullに設定しましたが、そのうちトップViewPagerはクリック可能ではありません。これをどうやって動かすことができますか?ViewPagerと別のViewPagerをオーバーレイする方法

enter image description here

+0

赤い矢印が示すユーザーの操作は?それは、 "ListViewの底部の終わりに達している間に"スクロールしていますか?あるいは、スクロールアップするとトップの「ViewPager」を押し出すでしょうか? – kalabalik

+0

トップの「ViewPager」は「すべてか何か」ですか?または、完全にスクロールアウトされていないときに部分的に表示したいのですか? – kalabalik

+0

スクロールアップの開始は、一番上のViewPagerを押し出すか、それを覆う必要があります。上に移動したり、ViewPagerの下に隠れているときに、彼を部分的に見せたいと思います。 –

答えて

0

それは複雑だと私はステップのいくつかが欠けてもよいが、基本的に何をしなければならないことは以下の通りです:

  • LinearLayoutで2つのViewPager Sを入れてください。親がその親の高さに一致する間、子はラップされます。
  • AbsListView.OnScrollListenerを実装し、3つのListViewOnScrollListenerをこの実装に設定します。
  • この実装では(onScrollStateChanged(AbsListView view, int scrollState)またはonScroll(final AbsListView listView, int firstVisibleItem, int visibleItemCount, int totalItemCount))、現在と古いスクロール位置のデルタを取得する - 距離と方向(正しい符号、本質的に)を得るスクロール
  • エッジケースを制御して、2つのViewPagerのy座標をそれに応じて変更します。
0

問題は非常に面白そうでした。問題を自分で解決しようとしたproject at Githubを追加しました。プロジェクトをクローンして実行すると、何が起こるかを見ることができます。

を含むViewPagerの内部にNestedScrollViewがあり、下部にViewPagerがあることが考えられます。

RecyclerView 23.2.0以上でのみ動作することに注意してください。だから、NestedScrollViewは目的を果たしますが、それはあまりにもいくつかの不要な動作を生成し、あなたのbuild.gradle

compile 'com.android.support:recyclerview-v7:23.2.0' 

に以下を追加する必要があります。たとえば、最下部のリストViewPagerは、リストが入力されると自動的に下にスクロールします。だから私は、あなたが断片はViewPagerたびにスワイプされている場合、ここで適切なスクロールを処理する必要が私のMainActivity

mNestedScrollView.smoothScrollTo(0, 0); 

の内側に、以下を追加する必要がありました。私はViewPagerの両方でonPageChangeListenerを追加し、コメントも追加しました。

メインレイアウトファイルactivity_main.xmlでは、両方の高さを固定しなければならないことを覚えておく必要があります。ViewPagerを修正してください。あなたの要件に応じてlayout_heightを変更することを検討するかもしれません。

乾杯!