Reputation: 1115
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.
Upvotes: 1
Views: 5406
Reputation: 1905
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" />
Upvotes: 1
Reputation: 298
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
Upvotes: 3