如何为API 21 / Lollipop以下的设备实现setZ()?

时间:2016-07-12 03:29:48

标签: android

我已成功实现了setZ()功能的拖动幻灯片动画,如下所示:

dragAnimSet.setAnimationListener(new Animation.AnimationListener() {
    @Override
    public void onAnimationStart(Animation animation) {
        ((ViewGroup)sourceParent.getParent()).setClipChildren(false);
        for(int a = 0; a < ifvList.size(); a++)
        {
            if(a != sourceIndex && a != indexInListener)
            {
                ifvList.get(a).setZ(-20);
            }
        }
        if(sourceParent.indexOfChild(toReplace) != -1 && toReplaceParent.indexOfChild(source) != -1) {
            source.setZ(-10);
        } else {
            sourceParent.setZ(-10);
        }
    }

    @Override
    public void onAnimationEnd(Animation animation) {
        ((ViewGroup)sourceParent.getParent()).setClipChildren(true);
        for(int a = 0; a < ifvList.size(); a++)
            {
                if(a != sourceIndex && a != indexInListener)
                {
                    ifvList.get(a).setZ(0);
                }
            }
            source.setZ(0);
            sourceParent.setZ(0);
        }

    @Override
    public void onAnimationRepeat(Animation animation) {}
});

但是,应用程序我在最低API为15的目标设备中使用此功能,而功能setZ()仅适用于API 21及更高版本。

bringToFront()或更改绘制顺序不会起作用,因为它是一个LinearLayout,而前者只会将视图带到列表的末尾。

我怎样才能至少模仿setZ()对API 21以下设备的影响?

1 个答案:

答案 0 :(得分:1)

Lollipop之前没有高程,因此没有setZ():绘图的顺序总是按照要添加的视图的顺序排列。

ViewCompat.setZ(),但很明显它在Lollipop之前没有做任何事情,只是允许你删除任何版本检查。