Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/208.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 不要剪辑ViewPager页面_Android_Android Fragments_Android Viewpager - Fatal编程技术网

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