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

标签 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,前者只会将 View 带到列表的末尾。

我怎样才能至少为 API 21 以下的设备模拟 setZ() 的效果?

最佳答案

在 Lollipop 之前没有提升,因此没有 setZ():绘图的顺序总是按照添加 View 的顺序。

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

关于android - 如何为 API 21/Lollipop 以下的设备实现 setZ()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38319581/

相关文章:

Android Gradle 问题?

java - Unity3D - 从 Android 调用静态方法

java - if block 中的逻辑有缺陷

android - 如何从 Eclipse 中删除 'unremovable' 控制台

android - 在Android响应式(Reactive)编程中,如何在应用过滤器后拆分流对象数据?

java - 使用 'javah' 使用 JNI 生成头文件

android - 带有 ImageView 的 AlertDialog 的大小太大

android - ViewBinding GeneratedCode 在哪里

android - 如何在 Flutter 中创建 ListTile 列表?

android - 联系人列表检索结果