外部片段的Android动画视图正在被剪裁

时间:2014-02-28 21:43:40

标签: android animation android-fragments android-animation

我在一个片段中有一个视图。此片段位于FrameLayout中。我想动画这个视图移动到片段边界之外。但是,当越过边界时,视图总是被剪裁。我已尝试将android:clipChildren="false"android:clipToPadding="false"设置为所有内容,但我无法让它发挥作用。

这甚至可以吗?

4 个答案:

答案 0 :(得分:7)

我遇到了与片段类似的问题,并将android:clipChildren="false"android:clipToPadding="false"放在我的层次结构中的所有级别上,但它仍然无效。对我有用的技巧是在我的片段代码中添加这个覆盖:

@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);

    ViewGroup vg = (ViewGroup) view;
    vg.setClipChildren(false);
    vg.setClipToPadding(false);
}

希望这会有所帮助......

P.S。积分应该转到answer

答案 1 :(得分:2)

frangulyan你错过了你的答案中的其他代码。以下解决方案对我有用。

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

}

答案 2 :(得分:0)

@frangulyan和@Barrie Galitzky已经给出的答案都在正确的轨道上,但是我必须在层次结构中为所有父级的setClipping false添加此循环才能正常工作

@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);

    ViewGroup vg = (ViewGroup) view;
    while(vg != null) {
        vg.setClipChildren(false);
        vg.setClipToPadding(false);
        vg = vg.getParent() instanceof ViewGroup ? (ViewGroup) vg.getParent() : null;
    }
}

答案 3 :(得分:0)

我知道这有点旧了,并给出了正确的答案,但我想补充一点,你可以使用onCreateViewViewGroup内做frangulyan所做的事情。即:

@Override
public View onCreateView(LayoutInflater, ViewGroup container, Bundle savedInstanceState) {
    container.setClipChildren(false);
    container.setClipToPadding(false);
    // Whatever other setup you like
    return View;
}