Pep*_*epe 95 android google-maps android-viewpager
我在视图寻呼机中集成了新的谷歌地图api v2片段.从地图片段滚动时,黑色视图与相邻片段重叠.有人解决了吗?
编辑:截图

public static class PagerAdapter extends FragmentPagerAdapter{
public PagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public int getCount() {
return NUM_ITEMS;
}
@Override
public Fragment getItem(int position) {
Fragment pageFragment;
switch (position) {
case 0:
pageFragment = new TabAFragment();
break;
case 1:
pageFragment = new TabBFragment();
break;
case 2:
pageFragment = SupportMapFragment.newInstance();
break;
default:
pageFragment = null;
break;
}
return pageFragment;
}
}
Run Code Online (Sandbox Code Playgroud)
Jef*_*elt 115
通过在ViewPager内部顶部放置一个透明背景的另一个视图,我能够在转换后阻止黑色表面留下FrameLayout:
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent" >
<android.support.v4.view.ViewPager
android:id="@+id/fragment_container"
android:layout_width="match_parent"
android:layout_height="match_parent" >
</android.support.v4.view.ViewPager>
<!-- hack to fix ugly black artefact with maps v2 -->
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/transparent" />
</FrameLayout>
Run Code Online (Sandbox Code Playgroud)
Lub*_*cek 43
与SlidingMenu和ViewPager有同样的问题.我注意到地图片段中的控制按钮在左后方的工件中不是黑色的.我通过重写onCreateView()方法解决了这个问题MapFragment (SupportMapFragment)
@Override
public View onCreateView(LayoutInflater inflater,
ViewGroup view,
Bundle savedInstance) {
View layout = super.onCreateView(inflater, view, savedInstance);
FrameLayout frameLayout = new FrameLayout(getActivity());
frameLayout.setBackgroundColor(
getResources().getColor(android.R.color.transparent));
((ViewGroup) layout).addView(frameLayout,
new ViewGroup.LayoutParams(
LayoutParams.FILL_PARENT,
LayoutParams.FILL_PARENT
)
);
return layout;
}
Run Code Online (Sandbox Code Playgroud)
Google发布了一个针对此问题的修复程序,但仅适用于4.1+(您不需要下载新版本的PlayServices,他们使用服务器端标志)
这就是我用来绕过这个问题的方法 - 确保你不会在设备上浪费任何CPU周期> = 4.1
public class FixMapFragment extends SupportMapFragment {
@Override
public View onCreateView(LayoutInflater inflater,
ViewGroup container,
Bundle savedInstanceState) {
View view = super.onCreateView(inflater, container, savedInstanceState);
// Fix for black background on devices < 4.1
if (android.os.Build.VERSION.SDK_INT <
android.os.Build.VERSION_CODES.JELLY_BEAN) {
setMapTransparent((ViewGroup) view);
}
return view;
}
private void setMapTransparent(ViewGroup group) {
int childCount = group.getChildCount();
for (int i = 0; i < childCount; i++) {
View child = group.getChildAt(i);
if (child instanceof ViewGroup) {
setMapTransparent((ViewGroup) child);
} else if (child instanceof SurfaceView) {
child.setBackgroundColor(0x00000000);
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
我的解决方法:使用GoogleMap的新快照界面,并在滚动页面时显示地图的快照.
这是我设置快照的代码(它与map相同,称为FragmentMap.java):
public void setSnapshot(int visibility) {
switch(visibility) {
case View.GONE:
if(mapFragment.getView().getVisibility() == View.VISIBLE) {
getMap().snapshot(new SnapshotReadyCallback() {
@Override
public void onSnapshotReady(Bitmap arg0) {
iv.setImageBitmap(arg0);
}
});
iv.setVisibility(View.VISIBLE);
mapFragment.getView().setVisibility(View.GONE);
}
break;
case View.VISIBLE:
if(mapFragment.getView().getVisibility() == View.GONE) {
mapFragment.getView().setVisibility(View.VISIBLE);
iv.setVisibility(View.GONE);
}
break;
}
}
Run Code Online (Sandbox Code Playgroud)
"mapFragment"是我的SupportedMapFragment,"iv"是ImageView(make it match_parent).
在这里我控制卷轴:
pager.setOnPageChangeListener(new OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
if(position == 0 && positionOffsetPixels > 0 || position == 1 && positionOffsetPixels > 0) {
((FragmentMap)adapter.getRegisteredFragment(1)).setSnapshot(View.GONE);
} else if(position == 1 && positionOffsetPixels == 0) {
((FragmentMap)adapter.getRegisteredFragment(1)).setSnapshot(View.VISIBLE);
}
}
@Override
public void onPageScrollStateChanged(int arg0) {}
@Override
public void onPageSelected(int arg0) {}
});
Run Code Online (Sandbox Code Playgroud)
我的带有map(FragmentMap)的片段位于位置1,所以我需要控制从位置0到1以及从位置1到2(第一个if子句)的滚动."getRegisteredFragment()"是我的自定义FragmentPagerAdapter中的一个函数,其中我有一个名为"registeredFragments"的SparseArray(Fragment).
因此,无论何时滚动到地图或从地图滚动,您总能看到它的快照.这对我很有用.
| 归档时间: |
|
| 查看次数: |
23716 次 |
| 最近记录: |