5

以下のコードは、mMyView を mPivotParent の子のセットの前面または背面に送信して、他のものの上または後ろにレンダリングされるようにする私の試みです。私の場合、ビューを非表示にするだけでは不十分です。

mPivotParent は FrameLayout です。

を見るmPivotParent.mChildrenと、順序が正しく設定されているという点で、以下のコードが「機能する」ことがわかります。それでも、z オーダーには影響しません。これだけでなく、再配置コードが呼び出される回数が増えるほど、フレームレートは累積的に遅くなります。全部で 4 人の子供が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();
}
4

2 に答える 2