android - 如何以编程方式调整 View 的 z 顺序

标签 android view android-framelayout

下面的代码是我尝试将 mMyView 发送到 mPivotParent 子集的前面或后面,以便它呈现在其他人的顶部或后面。在我的情况下,隐藏 View 不够

mPivotParent 是一个 FrameLayout。

查看 mPivotParent.mChildren 表明我下面的代码“有效”,因为顺序设置正确。但它对 z 顺序没有影响。不仅如此,随着重新定位代码被调用的次数越多,帧率也会越来越慢。总共有 4 个 child ,mPivotParent.mChildrenCount 始终如预期的那样保持在 4。

我的目标是 API 级别 7。

@Override
public boolean onTouchEvent(MotionEvent event) {
    Display display = getWindowManager().getDefaultDisplay();

    float x = event.getRawX();
    float sWidth = (int)display.getWidth();
    float xLerpFromCenter = ((x / sWidth) - .5f) * 2.f;             // [-1, 1]
    mRotateAnimation.mfLerp = xLerpFromCenter;

    if(xLerpFromCenter < -0.2f && mPivotParent.getChildAt(0) != mMyView)
    {
        mPivotParent.removeView(mMyView);
        mPivotParent.addView(mMyView, 0);
        refreshEverything();
    }
    else if(xLerpFromCenter > 0.2f && mPivotParent.getChildAt(0) == mMyView)
    {
        mPivotParent.removeView(mMyView);
        mPivotParent.addView(mMyView, mPivotParent.getChildCount() - 1);
        refreshEverything();
    }

    return super.onTouchEvent(event);
}

private void refreshEverything()
{
    for(int i = 0; i < mPivotParent.getChildCount(); ++i)
    {
        mPivotParent.getChildAt(i).invalidate();
        mPivotParent.getChildAt(i).requestLayout();
    }
    mPivotParent.invalidate();
    mPivotParent.requestLayout();
}

最佳答案

部分解决方案

这是一个有点低效的 hack,但它适用于我的目的,即取出最上面的项目并将其发送到后面,保持所有其他项目的顺序相同。

private void putFrontAtBack()
{
    for(int i = 0; i < mPivotParent.getChildCount() - 1; ++i)
    {
        mPivotParent.getChildAt(0).bringToFront();
    }
    refreshEverything();
}

注意:这在任意重新排序的一般情况下不起作用。

关于android - 如何以编程方式调整 View 的 z 顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9817526/

相关文章:

php - 选择php中的代码到android

android - 无法获取 Android View 的资源 ID

java - Activity和View之间的接口(interface)实现错误

java - 如何让我的按钮适合 Android 屏幕?

android - 难以创建我自己的自定义 View

java - 如何将可序列化类发送到具有所有字段的其他 Activity ?

android Weemo SDK 截取 WeemoVideoInFrame 的屏幕截图

android - 如何改进 Android O/New Google beacon API 上的后台信标扫描?

android - 将 Android camera2 api YUV_420_888 转换为 RGB

android - 在 webview 中向上滚动会导致 SwipeRefreshLayout 刷新