Google Map Fragment在NestedScrollView中滚动 [英] Google Map Fragment scrolling inside NestedScrollView

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

问题描述

我有一个 NestedScrollView 作为父级,而包含 googleMap 的Fragment作为其子级.当我在地图中向下或向上滚动时,NesetdScrollView处于滚动状态,而我无法在地图内部滚动.到现在为止,我已经尝试通过创建透明图像来解决堆栈溢出的问题,但这对我不起作用.

I am having a NestedScrollView as a parent and Fragment containing googleMap as its child. When Ever I scroll downwards or upwards in map the NesetdScrollView is scroll and I am unable to scroll inside the map. Till now I have tried a solution from stack overflow by creating a transparent Image but it didn't worked for me.

XML:

  <android.support.v4.widget.NestedScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_below="@+id/car_progress"
        android:id="@+id/nested_scroll"
        android:visibility="gone"

        >
............
............
<RelativeLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_below="@id/first_section"
                android:visibility="gone"
                android:id="@+id/map_wrapper"
                android:orientation="vertical"
                android:layout_marginTop="10dp"
                >

                <TextView
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:text="@string/dealer_location"
                    android:textAllCaps="true"
                    android:textColor="@color/colorPrimary"
                    style="@style/BoldStyle"
                    android:layout_marginLeft="@dimen/single_title_dimen"
                    android:layout_marginRight="@dimen/single_title_dimen"
                    android:id="@+id/dealer_head"

                    />

                <fragment xmlns:android="http://schemas.android.com/apk/res/android"
                    xmlns:tools="http://schemas.android.com/tools"
                    android:layout_width="match_parent"
                    android:layout_height="200dp"
                    android:id="@+id/map"
                    android:name="com.google.android.gms.maps.SupportMapFragment"
                    android:layout_below="@+id/dealer_head"
                    />
                <ImageView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:id="@+id/imagetrans"
                    android:layout_alignTop="@+id/map"
                    android:layout_alignBottom="@+id/map"
                    android:layout_alignEnd="@+id/map"
                    android:layout_alignRight="@+id/map"
                    android:layout_alignLeft="@+id/map"
                    android:layout_alignStart="@+id/map"
                    android:src="@android:color/transparent"/>

            </RelativeLayout>
.....
.....
 </android.support.v4.widget.NestedScrollView>

代码:

transImg.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.
                        nv.requestDisallowInterceptTouchEvent(true);
                        // Disable touch on transparent view
                        return false;

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

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

                    default:
                        return true;
                }
            }
        });

推荐答案

尝试一下...将此自定义地图片段与可触摸包装一起使用.

Try this... use this custom map fragment with touchable wrapper.

MySupportMapFragment mSupportMapFragment;
mSupportMapFragment = (MySupportMapFragment) getChildFragmentManager().findFragmentById(R.id.googleMap);
if(mSupportMapFragment != null)
        mSupportMapFragment.setListener(new MySupportMapFragment.OnTouchListener() {
        @Override
        public void onTouch() {
            scrollView.requestDisallowInterceptTouchEvent(true);
        }
    });

MySupportMapFragment

MySupportMapFragment

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

这篇关于Google Map Fragment在NestedScrollView中滚动的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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