아래 코드는 mMyView를 mPivotParent의 자식 집합의 앞이나 뒤로 보내려는 시도이므로 다른 쪽 위에 또는 뒤에 렌더링됩니다. 보기를 숨기면 이 아니라 내 경우에는이 충분합니다.프로그래밍 방식으로 뷰의 z 순서를 조정하는 방법
mPivotParent는 FrameLayout입니다.
mPivotParent.mChildren
에서 보는 것은 주문이 올바르게 설정되어 있다는 점에서 아래의 코드가 작동한다는 것을 보여줍니다. 그러나 그것은 z 순서에 영향을 미치지 않습니다. 뿐만 아니라 프레임 속도는 누적 적으로 느리고 속도가 느려지므로 재 위치 지정 코드가 호출되는 횟수가 늘어납니다. 총 4 명의 어린이가 있으며 예상대로 전체에 mPivotParent.mChildrenCount
이 남아 있습니다.
나는 여기 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();
}