1

UBER gibi bir uygulama geliştiriyorum. Özel işaretleyicinin ilk kaydırılması harita üzerinde sorunsuz çalışıyordu. Bundan sonra, UBER gibi NestedScrollView ekledim. Ancak harita kaydırma hareketi AppBar Scrolling davranışıyla çakışıyor. Ne yapacağımı bilmiyorum, lütfen bana yardımcı olun.Google Map with CollapsingToolbar ve NestedScrollView

Ekran

enter image description here

Bu benim Kod olduğunu.

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; 
    } 
} 

buldum uzun aramadan sonra 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

Varsa, hata günlüklerinizi gönderiniz, SO bileti okumayı denediniz mi? http://stackoverflow.com/questions/34629012/implement-google-map-like-uber –

+0

Hiç bir hatam yok ama kaydırma, harita içinde çalışmıyor, iç içe kaydırılan scrollview kaydırmayı çağırıyor. –

cevap

0

orada tasarım kütüphanesinde hata olduğunu ve bu bağlamda zaten reported

Onun sözü var

o

Bir AppBarLayout'taki kaydırılabilir kapsayıcılar hiç bir zaman resmi olarak destekli olmadı.

Bir sonraki sürümde, ihtiyacınız varsa sürüklemeyi devre dışı bırakmanıza olanak veren AppBarLayout.Behavior.DragCallback .

appbar düzen içeriğinde Bu DragCallback yöntem durdurma sürükleme etkisi ve NestedScrollView cazibe gibi çalışıyor.

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

, Actionbar Uber gibi gizlendiğinde "seçili konum" kutunuzu "Harita Fragmanı" & "İşaretçiyi" yukarı taşıyabilir misiniz? –

+0

şu anda bununla uğraşmayın:/ –

+0

bunu deneyin: https://github.com/umano/AndroidSlidingUpPanel şimdiki projemde bana yardımcı oldu .. –