2016-07-28 3 views
1

フルスクリーンレイアウトのGoogleMap、下部のViewPagerなどの機能を実装しようとしています。ViewPagerを使用したGoogleMap、ViewPagerFragmentアイテムの全画面スクロール

ViewPagerは、最初は下部にあり、コンテンツの高さが大きい場合は、垂直方向にスクロールできます。ユーザーはフルスクリーンでスクロールすることができます(ViewPagerのページ項目の高さは、下のデモ画像の下から上に上がっています)。

現在、私はViewPagerのフラグメント(以下のレイアウトコード)内でScrollView(match_parntの高さとその380dpのようなpaddingTop)の助けを借りて同じUI効果を達成することができます。

今すぐ問題が発生しましたGoogleMapは、フラグメントのmatch_parentという高さのため、タッチ/クリックイベントに反応しません。

私の期待する結果はGoogleMapです。タッチ/クリックイベントを聴くことができなければならず、ViewPagerのフラグメントは、マップの上から下の方向に垂直にスクロール可能でなければなりません。

私は検索中に、requestDisallowInterceptTouchEventを使用して、それらのタッチ/クリックイベントをリッスンする子ビューを作成できることを発見しました。しかし、私のケースでは、フラグメント内のViewPagerとScrollViewがすべてのタッチ/クリックイベントを取っています。コードの

ワンピース、

activity.xml

<FrameLayout 
    ... 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" > 

     <fragment 
     ... 
      android:name="com.google.android.gms.maps.SupportMapFragment" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      ... /> 

     <android.support.v7.widget.Toolbar 
      ... 
      android:layout_width="match_parent" 
      android:layout_height="?attr/actionBarSize" 
      ... /> 

     <android.support.v4.view.ViewPager 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" /> 
</FrameLayout> 

viewpager_fragment_item.xml

<ScrollView 
    ... 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_gravity="bottom" 
    ... > 

    <LinearLayout 
     ... 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:orientation="vertical" 
     android:paddingTop="380dp" > 

    <!-- 
      child views in here. 
     --> 
    </LinearLayout> 
</ScrollView> 

の予想される出力のデモ

このデモのユーザーで

Expected output demo

Map上/アウトズームに触れることができ、ViewPagerをスライドし、フルスクリーンでViewPagerのFragemtをスクロールすることができます。だから、これは私が達成しようとしていることです。

誰かが役に立つリンクやデモをお寄せいただければ幸いです。

助けてください!

ありがとうございました。 BottomSheetレイアウトを使用して、それを解決し[OK]を

答えて

0

私は完全にそれを理解するためにあなたのレイアウトコードの私の作品をお見せしましょう。

<android.support.design.widget.CoordinatorLayout 
    ... 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    ... > 

    <RelativeLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     app:layout_behavior="@string/appbar_scrolling_view_behavior"> 

     <fragment xmlns:map="http://schemas.android.com/apk/res-auto" 
      xmlns:tools="http://schemas.android.com/tools" 
      android:name="com.google.android.gms.maps.SupportMapFragment" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      .... /> 

     <!-- Other layout component code like Toolbar--> 

    </RelativeLayout> 

    <android.support.v4.widget.NestedScrollView 
     android:id="@+id/bottomSheet" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     app:layout_behavior="android.support.design.widget.BottomSheetBehavior"> 

     <android.support.v4.view.ViewPager 
      ... 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      ... /> 
    </android.support.v4.widget.NestedScrollView> 
</android.support.design.widget.CoordinatorLayout> 

Javaファイルでは、ピーク高さをボトムシートレイアウトに設定する必要があります。私はデモがうまくあなたがそれhere.

見つけることができるで作った

View bottomSheet = findViewById(R.id.bottomSheet); 
    mBottomSheetBehavior = BottomSheetBehavior.from(bottomSheet); 
    mBottomSheetBehavior.setPeekHeight(300); 
    mBottomSheetBehavior.setHideable(false); 
    mBottomSheetBehavior.setState(BottomSheetBehavior.STATE_DRAGGING); 

関連する問題