1

Ich entwickle App wie UBER. Das erste Scrollen des benutzerdefinierten Markers funktionierte auf der Karte gut. Danach habe ich NestedScrollView wie UBER hinzugefügt. Die Kartenscrollgeste widerspricht jedoch dem AppBar Scrolling-Verhalten. Ich weiß nicht, was ich tun soll, bitte hilf mir.Google Map mit CollapsingToolbar und NestedScrollView

Screenshot

enter image description here

Dies ist mein Code.

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

Bitte poste deine Fehlerprotokolle falls vorhanden, hast du versucht SO Ticket zu lesen? http://StackOverflow.com/Questions/34629012/Implement-Google-Map-Like-Uber –

+0

Ich habe keinen Fehler, aber das Scrollen funktioniert nicht innerhalb der Karte, es ruft geschachtelte scrollview scrollen. –

Antwort

0

Nach langer Suche fand ich, dass es Fehler in Design-Bibliothek ist, und es ist bereits reported

Die dort erwähnte, dass

Scrollbare Container in einem AppBarLayout wurden nie offiziell unterstützt.

Wenn die nächste Version einen Blick auf AppBarLayout.Behavior.DragCallback , mit denen Sie die Drag-Handling deaktivieren können, wenn Sie brauchen.

Diese DragCallback Methode Stop Drag-Effekt in AppBar Layout Inhalt und NestedScrollView ist wie Charme arbeiten.

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

können Sie Ihre "ausgewählten Ort" Box, "Map Fragment" & "Marker" nach oben bewegen, wenn Actionbar wie Uber versteckt? –

+0

nicht gerade jetzt, mit diesem Problem:/ –

+0

versuchen Sie dies: https://github.com/umano/AndroidSlidingUpPanel es half mir viel auf meinem aktuellen Projekt .. –