Scrollview中的Android Google Maps v2在某些设备上显示灰色图块

And*_*Sco 7 android google-maps

Scrollview中有Android Google Maps v2它适用于许多设备,但在某些设备上显示灰色瓷砖API KEY 正确,

要在Scrollview中使用Google Maps V2,应使用自定义类扩展SupportMapFragment,如下所示:

public class WorkaroundMapFragment extends SupportMapFragment {
    private OnTouchListener mListener;

    @Override
    public View onCreateView(LayoutInflater layoutInflater, ViewGroup viewGroup, Bundle savedInstance) {
        View layout = super.onCreateView(layoutInflater, viewGroup, savedInstance);

        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);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

还设置:

    ((WorkaroundMapFragment) getSupportFragmentManager().findFragmentById(R.id.map)).setListener(new WorkaroundMapFragment.OnTouchListener() {
            @Override
            public void onTouch() {
                mScrollViewDa.requestDisallowInterceptTouchEvent(true);
            }
        });
Run Code Online (Sandbox Code Playgroud)

用户拍摄的图像,Android版本:4.2.2,设备:Samsung Grand 2

应用程序测试:三星Galaxy Tab 2 10.1":4.0.3华硕Fonepad 7"平板电脑:5.0.1并且运行良好

android:minSdkVersion="10"
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

Fil*_*nik 1

对于类似的问题,我采取了不同的方法。

是的,你是对的,你不能将地图直接放入 ScrollView...但你可以拥有 FrameLayout 并在运行时将其替换为地图。像这样:

<FrameLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_marginTop="-100dp"
    android:layout_marginBottom="-100dp"
    android:id="@+id/mapViewDetail"
    android:scaleType="centerCrop"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_above="@+id/bottom_layout"
    tools:context="com.yourpackage.app.HomeActivity"
    tools:ignore="MergeRootFrame" />
Run Code Online (Sandbox Code Playgroud)

然后我创建了一个自定义地图,因为我需要一些“调整”(如果您对默认地图感到满意,则可以避免此步骤):

public abstract class MiniMapFragment extends MapFragment {

    @Override
    public View onCreateView(LayoutInflater arg0, ViewGroup arg1, Bundle arg2) {
        View v = super.onCreateView(arg0, arg1, arg2);
        initMap();
        return v;
    }

    public abstract void initMap();
}
Run Code Online (Sandbox Code Playgroud)

然后,在我刚刚添加的片段中:

    MiniMapFragment mMapFragment = new MiniMapFragment() {
        @Override
        public void initMap() {
            googleMap = getMap();
            getMap().getUiSettings().setMyLocationButtonEnabled(false);
            getMap().getUiSettings().setZoomControlsEnabled(false);
            getMap().getUiSettings().setScrollGesturesEnabled(false);
        }
    };

    FragmentTransaction fragmentTransaction =
            getFragmentManager().beginTransaction();
    fragmentTransaction.add(R.id.mapViewDetail, mMapFragment);
    fragmentTransaction.commit();
    getFragmentManager().executePendingTransactions();

    MapsInitializer.initialize(this);
Run Code Online (Sandbox Code Playgroud)

你应该没事。