如何使Google Maps在Scroll View中正确滚动? [英] How to make Google Maps scroll properly inside Scroll View?

查看:105
本文介绍了如何使Google Maps在Scroll View中正确滚动?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个片段,其中包含一个地图(视图),该地图位于我的布局的滚动视图内.

I have a fragment which holds a map(view) that is inside a scroll view of my layout.

问题是地图无法正确上下滚动(难以滚动).滚动视图似乎干扰了地图的垂直滚动.水平(平滑)滚动,而不是垂直滚动.

Problem is that map doesn't scroll properly(difficult to scroll) up or down. The scroll view seems to be interfering with the vertical scrolling of the map. It scrolls fine(smoothly) horizontally just not vertically.

我该如何解决?

我的XML布局:

<ScrollView
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_below="@+id/toolbar">

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

            <ImageView
                android:id="@+id/imageViewContactEmail"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginLeft="20dp"
                android:layout_marginStart="20dp"
                android:layout_marginTop="250dp"
                android:contentDescription="@string/contactEmailIcon"
                android:src="@drawable/ic_action_contactemail" />

            <TextView
                android:id="@+id/textViewContactEmail"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignEnd="@+id/imageViewContactEmail"
                android:layout_alignRight="@+id/imageViewContactEmail"
                android:layout_marginEnd="-50dp"
                android:layout_marginRight="-50dp"
                android:layout_marginTop="255dp"
                android:text="@string/contactEmail"
                android:textColor="#bdbdbd" />

            <TextView
                android:id="@+id/textViewContactEmailLink"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginLeft="61dp"
                android:layout_marginStart="61dp"
                android:layout_marginTop="275dp"
                android:text="@string/emailNDTC"
                android:textColor="#2196F3" />

            <ImageView
                android:id="@+id/imageViewContactLine"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_below="@+id/textViewContactEmailLink"
                android:layout_marginTop="20dp"
                android:contentDescription="@string/contactLine"
                android:src="@drawable/line" />

            <ImageView
                android:id="@+id/imageViewContactPhone"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_below="@+id/imageViewContactLine"
                android:layout_marginLeft="20dp"
                android:layout_marginStart="20dp"
                android:layout_marginTop="20dp"
                android:contentDescription="@string/contactPhoneIcon"
                android:src="@drawable/ic_action_contactphone" />

            <TextView
                android:id="@+id/textViewContactPhone"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignEnd="@+id/imageViewContactEmail"
                android:layout_alignRight="@+id/imageViewContactEmail"
                android:layout_below="@+id/imageViewContactLine"
                android:layout_marginEnd="-50dp"
                android:layout_marginRight="-50dp"
                android:layout_marginTop="22dp"
                android:text="@string/contactPhone"
                android:textColor="#bdbdbd" />

            <TextView
                android:id="@+id/textViewContactPhoneLink"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_below="@+id/imageViewContactLine"
                android:layout_marginLeft="61dp"
                android:layout_marginStart="61dp"
                android:layout_marginTop="43dp"
                android:text="@string/phoneNDTC"
                android:textColor="#2196F3" />

            <ImageView
                android:id="@+id/imageViewContactLine2"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_below="@+id/textViewContactPhoneLink"
                android:layout_marginTop="20dp"
                android:contentDescription="@string/contactLine2"
                android:src="@drawable/line" />

            <ImageView
                android:id="@+id/imageViewContactLocationPin"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_below="@+id/imageViewContactLine2"
                android:layout_marginLeft="20dp"
                android:layout_marginStart="20dp"
                android:layout_marginTop="18dp"
                android:contentDescription="@string/locationPinIcon"
                android:src="@drawable/ic_action_contactlocation" />

            <TextView
                android:id="@+id/textViewContactLocationPin"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_below="@+id/imageViewContactLine2"
                android:layout_marginLeft="55dp"
                android:layout_marginStart="55dp"
                android:layout_marginTop="20dp"
                android:text="@string/contactAddress"
                android:textColor="#bdbdbd" />

            <TextView
                android:id="@+id/textViewContactStreetAddress"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_below="@+id/textViewContactLocationPin"
                android:layout_marginLeft="56dp"
                android:layout_marginStart="56dp"
                android:layout_marginTop="4dp"
                android:text="@string/ndtcStreetAddress"
                android:textColor="@color/primaryTextColor" />

            <RelativeLayout
                android:id="@+id/map_container"
                android:layout_width="320dp"
                android:layout_height="200dp"
                android:layout_below="@+id/textViewContactStreetAddress"
                android:layout_gravity="center_horizontal"
                android:layout_marginLeft="30dp"
                android:layout_marginStart="30dp"
                android:layout_marginTop="12dp"
                tools:context=".ContactsActivity">

                <fragment xmlns:android="http://schemas.android.com/apk/res/android"
                    xmlns:map="http://schemas.android.com/apk/res-auto"
                    xmlns:tools="http://schemas.android.com/tools"
                    android:id="@+id/map"
                    android:name="com.google.android.gms.maps.SupportMapFragment"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    tools:context="pi.com.ndtc.MapsActivity" />

            </RelativeLayout>

            <ImageView
                android:id="@+id/imageViewContactLine3"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_below="@+id/map_container"
                android:layout_marginLeft="55dp"
                android:layout_marginStart="55dp"
                android:layout_marginTop="20dp"
                android:contentDescription="@string/contactLine3"
                android:src="@drawable/line" />

            <TextView
                android:id="@+id/textViewContactTitleSocial"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_below="@+id/imageViewContactLine3"
                android:layout_marginTop="5dp"
                android:text="@string/contactTitleSocial"
                android:textColor="#bdbdbd" />
        </RelativeLayout>
    </ScrollView>

我的活动:

    public class MapsActivity extends FragmentActivity implements OnMapReadyCallback {

    private GoogleMap mMap;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_maps);
        // Obtain the SupportMapFragment and get notified when the map is ready to be used.
        SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
                .findFragmentById(R.id.map);
        mapFragment.getMapAsync(this);
    }


    /**
     * Manipulates the map once available.
     * This callback is triggered when the map is ready to be used.
     * This is where we can add markers or lines, add listeners or move the camera. In this case,
     * we just add a marker near Sydney, Australia.
     * If Google Play services is not installed on the device, the user will be prompted to install
     * it inside the SupportMapFragment. This method will only be triggered once the user has
     * installed Google Play services and returned to the app.
     */
    @Override
    public void onMapReady(GoogleMap googleMap) {
        mMap = googleMap;

        // Add a marker in Sydney and move the camera
        LatLng sydney = new LatLng(-34, 151);
        mMap.addMarker(new MarkerOptions().position(sydney).title("Marker in Sydney"));
        mMap.moveCamera(CameraUpdateFactory.newLatLng(sydney));


    }
}

推荐答案

您可以添加适合mapFragment的透明ImageView:

You can add a transparent ImageView that fits the mapFragment:

           <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/imagetrans"
            android:layout_alignTop="@+id/mapfragment"
            android:layout_alignBottom="@+id/mapfragment"
            android:layout_alignEnd="@+id/mapfragment"
            android:layout_alignRight="@+id/mapfragment"
            android:layout_alignLeft="@+id/mapfragment"
            android:layout_alignStart="@+id/mapfragment"
            android:src="@color/transparent"/>

然后,当用户触摸它时,禁止使用scrollView:

And then, when the user is touching it, disallow the scrollView:

final ScrollView scroll = (ScrollView) findViewById(R.id.scroll);
ImageView transparent = (ImageView)findViewById(R.id.imagetrans);

transparent.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            int action = event.getAction();
            switch (action) {
                case MotionEvent.ACTION_DOWN:
                    // Disallow ScrollView to intercept touch events.
                    scroll.requestDisallowInterceptTouchEvent(true);
                    // Disable touch on transparent view
                    return false;

                case MotionEvent.ACTION_UP:
                    // Allow ScrollView to intercept touch events.
                    scroll.requestDisallowInterceptTouchEvent(false);
                    return true;

                case MotionEvent.ACTION_MOVE:
                    scroll.requestDisallowInterceptTouchEvent(true);
                    return false;

                default:
                    return true;
            }
        }
    });

这样,只有当用户触摸ImageView时,地图才会响应触摸事件.其余时间,ScrollView将响应.

This way, only when the user touches the ImageView, the map will respond to touching events. The rest of the time, the ScrollView will respond.

这篇关于如何使Google Maps在Scroll View中正确滚动?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆