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"
最佳答案
对于类似的问题,我采用了不同的方法。
是的,您是对的,您不能直接在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);
而且你应该没事。