我在使用PageTransformer和MapView设置ViewPager时遇到问题。问题是当viewpager设置为使用PageTransformer时,mapview在平移时消失(变为透明)。但是,如果我不使用变压器而只是平移Mapview就可以了。有谁知道导致这种行为的原因是什么?
目前,PageTransformer没有做任何特别的事情,但只是设置它似乎会影响绘制mapview的方式。我应该注意到地图是透明的,而mapview(法律声明)仍然存在。当ViewPager进入空闲状态时,将显示地图。
viewPager.setPageTransformer(true, this);
...
@Override
public void transformPage(View view, float position) {
}
XML:ViewPager Fragment
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#FFFFFF">
<com.google.android.gms.maps.MapView
android:id="@+id/mapcontainer"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clickable="false"/>
</FrameLayout>
地图片段:
private GoogleMap map;
private MapView mapView;
private Bundle mapBundle;
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
mapBundle = savedInstanceState;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.mapfragment, container, false);
MapsInitializer.initialize(getActivity());
mapView = (MapView) rootView.findViewById(R.id.mapcontainer);
mapView.onCreate(mapBundle);
map = mapView.getMap();
return rootView;
}
@Override
public void onResume(){
super.onResume();
mapView.onResume();
}
@Override
public void onPause(){
super.onPause();
mapView.onPause();
}
@Override
public void onDestroy(){
super.onDestroy();
mapView.onDestroy();
}
答案 0 :(得分:1)
我从讨论主题Bug: Black rectangle background on scroll找到了一个解决方案,它指出了我正确的方向。 Google Play服务中似乎存在一些可以通过将地图设置为“精简模式”来解决的错误。在我的情况下它完成了诀窍,地图现在正在pagetransformer中工作。据我所知,lite模式将地图更改为位图图像。您可以在此处详细了解Google Maps - Lite Mode。精简模式有一些限制,例如无法平移或缩放,但在我的情况下,它不是必需的。
我将XML更新为:
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#FFFFFF">
<com.google.android.gms.maps.MapView
xmlns:map="http://schemas.android.com/apk/res-auto"
android:id="@+id/mapcontainer"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clickable="false"
map:liteMode="true"/>
</FrameLayout>
您也可以在代码中设置此选项:
GoogleMapOptions options = new GoogleMapOptions().liteMode(true);
MapView mapView = MapView (context, options);