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

并设置:
    ((WorkaroundMapFragment) getSupportFragmentManager().findFragmentById(R.id.map)).setListener(new WorkaroundMapFragment.OnTouchListener() {
            @Override
            public void onTouch() {
                mScrollViewDa.requestDisallowInterceptTouchEvent(true);
            }
        });

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

应用测试如下: Samsung Galaxy Tab 2 10.1“:4.0.3 华硕Fonepad 7”平板电脑:5.0.1 效果很好
android:minSdkVersion="10"

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

最佳答案

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

是的,您是对的,您不能直接在ScrollView中使用 map ,但是可以使用FrameLayout并在运行时将其替换为 map 。像这样:

<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" />

然后,我创建了一个自定义 map ,因为我需要进行一些“调整”(如果可以使用默认 map ,则可以避免此步骤):
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();
}

然后,在 fragment 中我刚刚添加了:
    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);

而且你应该没事。

10-06 13:42