Android 不要剪辑ViewPager页面
我无法获取我的Android 不要剪辑ViewPager页面,android,android-fragments,android-viewpager,Android,Android Fragments,Android Viewpager,我无法获取我的ViewPager不剪切其页面内容 我目前正在应用程序中使用ViewPager和FragmentStatePagerAdapter。我有3页,每一页都显示了不同的片段。 一切正常,但现在我希望能够在页面边界之外进行绘制,如下图所示: 我在我的所有视图中将clipChildren和clipPadding设置为false,将父视图设置为需要在其边界之外绘制的视图,但我得到的是:我的视图根据页面边界进行剪裁 一些附加信息:为了解决这个问题,我使用了hierarchyviewer来检查
ViewPager
不剪切其页面内容
我目前正在应用程序中使用ViewPager
和FragmentStatePagerAdapter
。我有3页,每一页都显示了不同的片段。
一切正常,但现在我希望能够在页面边界之外进行绘制,如下图所示:
我在我的所有视图中将clipChildren
和clipPadding
设置为false
,将父视图设置为需要在其边界之外绘制的视图,但我得到的是:我的视图根据页面边界进行剪裁
一些附加信息:为了解决这个问题,我使用了hierarchyviewer
来检查我的视图层次结构,看看一些“引擎盖下”视图是否有剪切行为。宾果:我的每个片段的根视图都添加到了一个nosvestateframelayout
下。我怀疑这家伙想把孩子们剪掉
你认为我最后的假设正确吗?如何获取未剪辑的页面?有一些不同的视图需要禁用剪辑。首先,ViewPager根目录下的FrameLayout需要禁用剪裁。您可以在初始化视图寻呼机的任何位置执行此操作。您还需要将屏幕外页面限制设置为2,以允许在刷卡期间加载额外的片段。如果不这样做,您将看到一个从1->2的弹出窗口作为3个加载,并在2完成加载后将其溢出内容添加到2(这将提前加载2和3) 其次,在FragmentStatePagerAdapter中膨胀的XML需要包含适当的标记,或者可以通过编程实现。最后,您需要强制NoSaveStateFrameLayout也不要剪裁。这可以在onViewCreated中创建视图后完成。下面是一个示例片段:
public static class PlaceholderFragment extends Fragment {
public static PlaceholderFragment newInstance() {
PlaceholderFragment fragment = new PlaceholderFragment();
return fragment;
}
public PlaceholderFragment() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
LinearLayout rootView = (LinearLayout) inflater.inflate(R.layout.fragment_main, container, false);
//This can be done in XML
rootView.setClipChildren(false);
rootView.setClipToPadding(false);
return rootView;
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
//This is the NoSaveStateFrameLayout - force it to not clip
FrameLayout frameLayout = (FrameLayout) getView();
frameLayout.setClipChildren(false);
frameLayout.setClipToPadding(false);
}
}
我已经测试过这个解决方案,并且确信它是有效的
完整活动示例:
您是否尝试使用负值作为页面之间的边距(使用
ViewPager.setPageMargin(int)
)?您还必须将屏幕外页面限制设置为至少2(使用ViewPager.setOffscreenPageLimit(int)
)。我也遇到了同样的问题。我通过添加
android:clipChildren="false"
android:clipToPadding="false"
到ViewPager
和ViewGroup
这是ViewPager
例如,如果您有这样的布局:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:clipChildren="false"
android:clipToPadding="false"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v4.view.ViewPager
android:clipChildren="false"
android:clipToPadding="false"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
</FrameLayout>
</RelativeLayout>
试试这个:
@Override
public float getPageWidth(int position) {
return 0.80f;
}
这对我来说非常有效
1. (Parent Layouts).setClipChildren(false);
(Parent Layouts).setClipToPadding(false);
2. `mViewPager.setPagerMargin(dp)`
3. `mViewPager.setOffscreenPageLimit(numberOfPage);`
非常感谢你的回答和时间。成功了。虽然比这更复杂,因为我的ViewPager上有一个PageTransformer,但你不知道。我将转换视图上的图层设置为“无”,它成功了。不客气!这是一个有趣的问题,所以我很乐意帮忙。我以前从未做过这样的事情,所以解决这个问题很酷。对我来说,除了4.1.2之外,它在所有版本的Android上都能出色地工作。在该版本上,如果视图没有通常在视图中的部分,则根本不绘制该视图。所有其他版本都允许我从一个片段到另一个片段,毫无问题。也有一个PageTransformer,你的评论帮助了Ludovic。谢谢对于遇到相同问题的另一个,只需设置
page.setLayerType(View.LAYER\u TYPE\u NONE,null)
在PageTransformer的transformPage方法中。我让它工作了,但也有一个PageTransformer
。现在,来自cardwiew
项目的立面阴影非常不稳定,在每个项目上重复。不过,卸下变压器可以修复它。将layertype设置为“无”不起作用。
@Override
public float getPageWidth(int position) {
return 0.80f;
}
1. (Parent Layouts).setClipChildren(false);
(Parent Layouts).setClipToPadding(false);
2. `mViewPager.setPagerMargin(dp)`
3. `mViewPager.setOffscreenPageLimit(numberOfPage);`