1

I have a map fragment inside a vertical scrollview. I want it to be scrollable. but it is not working. I have tried adding a transparent image and also the custom Scrollview from these answers: how to set google map fragment inside scroll view

Google Maps API v2 SupportMapFragment inside ScrollView - users cannot scroll the map vertically

My layout structure:

<?xml version="1.0" encoding="utf-8"?> <ScrollView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/scrollView" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".activities.TripDetailsActivity"> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:background="#ECF0F1" android:orientation="vertical"> <android.support.v7.widget.CardView android:id="@+id/card_map" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_margin="10dp"> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:background="@color/colorCard" android:orientation="vertical" android:weightSum="12"> <TextView android:id="@+id/tripTxt" android:layout_width="match_parent" android:layout_height="0dp" android:layout_marginLeft="20dp" android:layout_marginTop="20dp" android:layout_marginBottom="5dp" android:layout_weight="3" android:text="Trip" android:textColor="@color/colorTextCard" android:textSize="20sp" /> <fragment android:id="@+id/map" android:name="com.google.android.gms.maps.SupportMapFragment" android:layout_width="match_parent" android:layout_height="300dp" android:layout_margin="10dp" tools:context="com.example.keelindemo.Activities.Map" /> <TextView android:id="@+id/start_point" android:layout_width="match_parent" android:layout_height="0dp" android:layout_marginLeft="10dp" android:layout_weight="2" android:drawableLeft="@drawable/flag_start" android:drawablePadding="10dp" android:gravity="center_vertical" android:textColor="@color/colorTextCard" /> <TextView android:id="@+id/end_point" android:layout_width="match_parent" android:layout_height="0dp" android:layout_marginBottom="10dp" android:layout_marginLeft="10dp" android:layout_marginTop="10dp" android:layout_weight="2" android:drawableLeft="@drawable/flag_end" android:drawablePadding="10dp" android:gravity="center_vertical" android:textColor="@color/colorTextCard" /> </LinearLayout> </android.support.v7.widget.CardView> 

Please suggest some solution. I am trying everything on Marshmallow.

1
  • suggest you try NestedScrollView instead - they added some nice enhancements with "nested scrolling" as the name suggests Commented Aug 29, 2016 at 11:31

2 Answers 2

3

you can scroll google map inside scrollview. see below link i describe how to scroll map inside scrollview in android: http://newtech4you4ever.blogspot.in/2016/08/scroll-googlemap-in-scrollview-android.html

Sign up to request clarification or add additional context in comments.

6 Comments

I tried it, it throws null pointer exception in the custom Class. public void setListener(OnTouchListener listener) { mListener = listener; } This method shows unused and hence null mListener
can you create interface OnTouchListener?
you have already created it.. so yes the interface is there in the code
i change MainActivity Code. I change declaration of GoogleMap.Please check it.
Now it worked, thank you so much! by the way change the variable names in the updated code of your blog..
|
1
public class MySupportMapFragment extends SupportMapFragment { private OnTouchListener mListener; @Override public View onCreateView(LayoutInflater inflater, ViewGroup parent, Bundle savedInstanceState) { View layout = super.onCreateView(inflater, parent, savedInstanceState); TouchableWrapper frameLayout = new TouchableWrapper(getActivity()); frameLayout.setBackgroundColor(getResources().getColor(android.R.color.transparent)); ((ViewGroup) layout).addView(frameLayout, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)); return layout; } public void setListener(OnTouchListener listener) { mListener = listener; } public interface OnTouchListener { public abstract void onTouch(); } public class TouchableWrapper extends FrameLayout { public TouchableWrapper(Context context) { super(context); } @Override public boolean dispatchTouchEvent(MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: mListener.onTouch(); break; case MotionEvent.ACTION_UP: mListener.onTouch(); break; } return super.dispatchTouchEvent(event); } } } 

In Your activity/fragment, add the following code in onCreate/onViewCreated

ScrollView nScrollView = (ScrollView) findViewById(R.id.scrollViewParent); MySupportMapFragment mSupportMapFragment; mSupportMapFragment = (MySupportMapFragment) getChildFragmentManager().findFragmentById(R.id.googleMap); mSupportMapFragment.setListener(new MySupportMapFragment.OnTouchListener() { @Override public void onTouch() { mScrollView.requestDisallowInterceptTouchEvent(true); } }); if (mSupportMapFragment != null) { mSupportMapFragment.getMapAsync(new OnMapReadyCallback() { @Override public void onMapReady(GoogleMap googleMap) { if (googleMap != null) { googleMap.getUiSettings().setAllGesturesEnabled(true); googleMap.getUiSettings().setZoomControlsEnabled(true); LatLng marker_latlng = new LatLng(lat, lon); CameraPosition cameraPosition = new CameraPosition.Builder().target(marker_latlng).zoom(15.0f).build(); CameraUpdate cameraUpdate = CameraUpdateFactory.newCameraPosition(cameraPosition); googleMap.moveCamera(cameraUpdate); if (latitude != null && longitude != null) { googleMap.addMarker(new MarkerOptions().position(marker_latlng).title("Address")); } } } }); } 

& your layout as this

<fragment android:id="@+id/googleMap" class="com.yourpackagename.MySupportMapFragment" android:layout_width="match_parent" android:layout_height="match_parent" /> 

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.