17

안녕하세요 다시 스택 오버 플로우가 발생합니다. 다른 단편적인 질문이 있습니다. (android.app.Fragment Support Fragments를 사용하고 있습니다)조각의 대체 높이 값이 잘못되었습니다.

조각을 대체하려고합니다. 그러나 이것은 사용하는 것만 큼 간단하지 않다 :

fragmentTransaction 
    .replace(containerId, newFragment) 
    .addToBackStack("unique tag") 
    .commit() 

왜? 좋은 질문 친구, 왜냐하면 내 newFragment에 전환 애니메이션이 있기 때문입니다.

애니메이션은 어디에 정의되어 있습니까? 또 하나의 큰 의문점은 onCreateAnimator()에 정의 된 것입니다.

왜 거기에 정의되어 있습니까? 이유에 대한 오랜 대답은 Nested fragments transitioning incorrectly입니다. 지금 당장 당신은 이것이 내 프로젝트에서해야 할 일들이라고 믿어야합니다.

애니메이션이란 무엇입니까? 화면의 가장자리에서 중앙으로 간단하게 스크롤하여 원래 조각을 완전히 덮습니다. 이 시나리오에서는 이전 조각이 그대로 자리 잡고 있음을 명심하십시오. 움직이지 않는 애니메이션 효과가 있습니다.


무엇이 문제인가?

newFragment가 이전보다 낮은 elevation (또는 z?) 값을 갖는 것 같습니다. 따라서 이전 조각이 새 조각 위에 있기 때문에 전환을 관찰 할 수 없습니다. 애니메이션 기간이 끝나면 이전 조각 위에 새로운 조각이 깜박입니다. 나는 newFragment가 애니메이션의 시작 부분에서 이전 것을 커버 할 것으로 기대했다.


왜 사용하지 않습니까? 이것은 많은 조각을 가지고 있기 때문에 더 많은 문제를 일으키는 것으로 보입니다. add를 사용하면 다음에 교체 할 때 exit 애니메이션이 실행되는 것처럼 보입니다. 앞에는 1 ... n 개의 조각이 있어도 마찬가지입니다. 그들은 또한 멈추지 않습니다.

고도를 설정하지 않는 이유는 무엇입니까? 왜냐하면 고도 속성이없는 api 19를 지원하기 때문입니다.

api 19에 ViewCompat.setElevation()을 사용하지 않는 이유는 무엇입니까? 나는 그것을 시도하고 동일한 실패 결과가 있습니다.

누구든지이 문제를 해결할 방법을 찾았습니까?

+0

트랜잭션을 커밋하기 전에 applyin ['setReorderingAllowed (false)'] (https://developer.android.com/reference/android/support/v4/app/FragmentTransaction.html#setReorderingAllowed (boolean))을 시도 했습니까? – azizbekian

+0

API에서 유일하게 사용할 수있는 @azizbekian 26+ – zafrani

+0

사실은 아니지만 적어도 API 14 이상에서는 지원 부분을 사용할 수 있습니다. – azizbekian

답변

5

나는 똑같은 문제가있어서 그것을 고치려고 많은 시간을 보냈다. 불행히도 제 경험상이 설정에서 API < = 19로 작동하게하는 방법은 없습니다.

ViewCompat.setElevation()은 단순히 < = 19 API의 NoOp이므로 작동하지 않습니다. SDK 21부터는 표고를 설정하고 문제를 해결합니다. Z 색인 설정은 잘 작동합니다.

내가 조언 할 수있는 유일한 것은 API < = 19에 대한 전환을 어떻게해서든지 Z 색인에 의존하지 않도록 변경하는 것입니다. 그리고 21 세 이상은 원하는 전환을 사용하십시오. 이것이 내가 한 방식이었고 대다수의 사용자가 21 세 이상이기 때문에 괜찮다고 생각합니다.

+0

나는 이것이 내가 가지고있는 유일한 선택 인 것을 두려워합니다. – zafrani