1

私はUBERのようなアプリを開発しています。カスタムマーカーの最初のスクロールは地図上でうまくいきました。その後、UBERのようにNestedScrollViewを追加しました。しかし、地図スクロールジェスチャーは、AppBarスクロールの動作と競合しています。 私は何をすべきか分かりません。私を助けてください。Google Map with CollapsingToolbarとNestedScrollView

スクリーンショット

enter image description here

これは私のコードです。

home_fragment.xml

<?xml version="1.0" encoding="utf-8"?><?xml version="1.0" encoding="utf-8"?> 

<android.support.design.widget.AppBarLayout 
    android:id="@+id/appbar" 
    android:layout_width="match_parent" 
    android:layout_height="460dp" 
    android:fitsSystemWindows="true" 
    android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"> 

    <android.support.design.widget.CollapsingToolbarLayout 
     android:id="@+id/collapsing_toolbar" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:fitsSystemWindows="true" 
     app:contentScrim="?attr/colorPrimary" 
     app:expandedTitleMarginEnd="64dp" 
     app:expandedTitleMarginStart="48dp" 
     app:layout_scrollFlags="scroll|exitUntilCollapsed|snap"> 

     <!-- Map Layout starts here --> 
     <FrameLayout 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      app:layout_collapseMode="parallax"> 

      <RelativeLayout 
       android:layout_width="match_parent" 
       android:layout_height="match_parent"> 

       <fragment 
        android:id="@+id/map" 
        android:layout_width="match_parent" 
        android:layout_height="match_parent" 
        class="com.anuj.retrofitparsing.customClasses.MySupportMapFragment"></fragment> 


       <ImageView 
        android:id="@+id/mylocation" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:layout_alignParentBottom="true" 
        android:layout_alignParentRight="true" 
        android:layout_margin="@dimen/activity_margin_16" 
        android:padding="@dimen/activity_margin_10" 
        android:src="@drawable/mylocation" /> 

       <LinearLayout 
        android:id="@+id/locationMarker" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:layout_centerInParent="true" 
        android:layout_gravity="center" 
        android:layout_marginBottom="30dp" 
        android:gravity="center" 
        android:orientation="vertical"> 

        <TextView 
         android:id="@+id/locationMarkertext" 
         android:layout_width="wrap_content" 
         android:layout_height="wrap_content" 
         android:background="@drawable/setlocation_bg" 
         android:gravity="center" 
         android:minWidth="180dp" 
         android:padding="@dimen/activity_margin_5" 
         android:paddingLeft="2dp" 
         android:paddingRight="2dp" 
         android:text=" Set your Location " 
         android:textColor="@color/white" /> 

        <ImageView 
         android:id="@+id/imageView1" 
         android:layout_width="wrap_content" 
         android:layout_height="wrap_content" 
         android:src="@drawable/add_marker" /> 
       </LinearLayout> 
      </RelativeLayout> 


      <LinearLayout 
       android:id="@+id/search_layout" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:layout_gravity="top" 
       android:layout_margin="@dimen/activity_margin_16" 
       android:background="@drawable/searchbar_bg" 
       android:orientation="vertical" 
       android:padding="@dimen/activity_margin_5"> 

       <TextView 
        android:id="@+id/textView1" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:layout_marginLeft="10dp" 
        android:text="Selected Location" 
        android:textAppearance="?android:attr/textAppearanceSmall" 
        android:textColor="#28b54c" 
        android:textSize="@dimen/text_size" /> 

       <TextView 
        android:id="@+id/adressText" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:layout_marginLeft="10dp" 
        android:ellipsize="end" 
        android:singleLine="true" 
        android:text="Getting location" 
        android:textColor="@color/app_textcolor" 
        android:textSize="@dimen/text_size_small" /> 
      </LinearLayout> 
     </FrameLayout> 
     <!-- Map Layout Ends here --> 

    </android.support.design.widget.CollapsingToolbarLayout> 

</android.support.design.widget.AppBarLayout> 

<android.support.v4.widget.NestedScrollView 
    android:id="@+id/nScrollView" 
    android:layout_width="match_parent" 
    android:layout_height="120dp" 
    android:layout_alignParentBottom="true" 
    app:layout_behavior="@string/appbar_scrolling_view_behavior"> 

</android.support.v4.widget.NestedScrollView> 

TouchableWrapper.java

public class TouchableWrapper extends FrameLayout { 
    public TouchableWrapper(Context context) { 
     super(context); 
    } 

    @Override 
    public boolean dispatchTouchEvent(MotionEvent event) { 

     switch (event.getAction()) { 

      case MotionEvent.ACTION_DOWN: 
       HomeFragment.mMapIsTouched = true; 
       break; 

      case MotionEvent.ACTION_UP: 
       HomeFragment.mMapIsTouched = false; 
       break; 
     } 
     return super.dispatchTouchEvent(event); 
    } 
} 

MySupportMapFragment

public class MySupportMapFragment extends SupportMapFragment { 
    public View mOriginalContentView; 
    public TouchableWrapper mTouchView; 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup parent, Bundle savedInstanceState) { 
     mOriginalContentView = super.onCreateView(inflater, parent, savedInstanceState); 
     mTouchView = new TouchableWrapper(getActivity()); 
     mTouchView.addView(mOriginalContentView); 
     return mTouchView; 
    } 

    @Override 
    public View getView() { 
     return mOriginalContentView; 
    } 
} 

HomeFragment

googleMap.setOnCameraChangeListener(new GoogleMap.OnCameraChangeListener() { 

      @Override 
      public void onCameraChange(CameraPosition arg0) { 
       // TODO Auto-generated method stub 
       if (!mMapIsTouched) { 
        // Show Outer layout 
        CommonMethods.getInstance().e("","User Is not touching MAP"); 
        googleMap.getUiSettings().setAllGesturesEnabled(true); 
       } 
       else{ 
        // Hide Outer Layout 
        CommonMethods.getInstance().e("", "User Is touching MAP"); 
        googleMap.getUiSettings().setAllGesturesEnabled(false); 
       } 

      } 
     }); 
+0

SOチケットを読もうとした場合は、エラーログを投稿してください。 http://stackoverflow.com/questions/34629012/implement-google-map-like-uber –

+0

スクロールがマップ内で動作していないのにエラーはありませんが、ネストされたスクロールビューのスクロールが呼び出されます。 –

答えて

0

長い検索後、私はバグが設計ライブラリであることを発見し、それはreported

そのは

ことが挙げすでにあります

AppBarLayoutのスクロール可能なコンテナは、正式には に対応していません。

次のリリースでは、AppBarLayout.Behavior.DragCallback を参照すると、必要に応じてドラッグ処理を無効にすることができます。

アプリケーションバーのレイアウト内容とNestedScrollViewこのDragCallback方法ストップドラッグ効果は魅力のように働いています。

AppBarLayout appBarLayout = (AppBarLayout) findViewById(R.id.appbar_layout); 
    CoordinatorLayout.LayoutParams params = 
      (CoordinatorLayout.LayoutParams) appBarLayout.getLayoutParams(); 
    AppBarLayout.Behavior behavior = new AppBarLayout.Behavior(); 
    behavior.setDragCallback(new AppBarLayout.Behavior.DragCallback() { 
     @Override 
     public boolean canDrag(AppBarLayout appBarLayout) { 
      return false; 
     } 
    }); 
+0

アクションバーがUberのように隠れている場合、あなたは「選択した場所」ボックス、「地図の断片」と「マーカー」を上に移動できますか? –

+0

今のところこれで苦労しています:/ –

+0

これを試してみてください: https://github.com/umano/AndroidSlidingUpPanel これは私の現在のプロジェクトで大変助けになりました。 –