2015-02-07 9 views
13

의 내가 다음 문서에서 설명하는 예를 들어 같은 안드로이드 응용 프로그램을 개발하는 뷰 기반의 접근 방식을 사용하고 있다고 가정 해 봅시다 : 나는 모든이가 이제 http://corner.squareup.com/2014/10/advocating-against-android-fragments.html공유 요소 전환

을 화면보기. 하나는 볼 수 있으며 이미지 격자가 있습니다. 다른 하나는 숨겨져 있으며 클릭 할 이미지의 상세보기입니다. 그리드의 이미지를 클릭 할 때 전환이 없으면 그리드보기가 숨겨지고 상세보기가 표시됩니다. 이제 격자보기의 작은 이미지와 세부보기의 큰 이미지 사이의 공유 요소 전환과 비슷한 것을 원한다면 어떻게할까요? 이게 가능한가?

Image

+2

android.transition.Scene? – pskink

답변

18

예, 전환이 할 수 있습니다.

예제에서 그리드 뷰와 상세 뷰 모두 이미 계층 구조에 있습니다. 전환을 사용하려면 상세 뷰가 뷰 계층에서 시작되지 않는 것이 좋습니다. 두 가지 견해를 교환해야합니다.

두 가지 (비슷한) 방법이 있습니다. 첫 번째는 장면에서 격자보기를 사용하는 것입니다. 그런 다음 TransitionManager.go (detailScene, transition)를 사용하십시오.

두 번째 방법은 TransitionManager.beginDelayedTransition을 사용하고 그리드 레이아웃의 세부 레이아웃을 교체하는 것입니다.

공유보기에는 공통점이 있어야합니다. 일반적으로 View ID 또는 transitionName입니다. 이 링크는 뷰가 다른 인스턴스 임에도 불구하고 전환 시스템에 알려줍니다.

사용하려는 전환은 @android : 전환/이동입니다. ChangBounds, ChangeTransform, ChangeImageTransform 및 ChangeClipBounds를 결합합니다. 공유 요소 뷰에서이를 대상으로해야합니다. 보기를 시작하거나 종료 할 때 다른 전환 (Fade?)이 필요해 보입니다. 이 같은

뭔가 :

TransitionSet shared = ... 
shared.addTarget("sharedName"); 
gridElement.setTransitionName("sharedName"); 
Fade fade = new Fade(); 
fade.excludeTarget("sharedName", true); 
TransitionSet set = new TransitionSet(); 
set.addTransition(shared) 
    .addTransition(fade); 
TransitionManager.go(detailScene, set); 
+1

George, 답장을 보내 주셔서 감사합니다. 귀하의 접근 방식 (https://github.com/eugenkiss/MaterialEverywhere/commit/53b6ddcd22f40e06b11a06b9c7613a1e8b13ffe5)을 사용하여 빠른 POC를 만들었습니다. 그러나 뷰 기반 (공유) 전환과 원래의 활동 기반 전환을 비교하면 몇 가지 단점이 있습니다. 예를 들어, 공유 요소는 오버레이에 그려지지 않고 대신 이전 장면이 그려집니다. 이 접근법을 개선하여 이전 활동 기반 전환과 거의 비슷하게 보일 가능성이 있습니까? – Eugen

+1

좋은 소식과 나쁜 소식이 있습니다. 좋은 소식은 앱 전환 작업을 수행하는 방법을 알아 냈습니다. 나쁜 뉴스는 그것이 조금 hokey이다이다! 페이드 전환과 ChangeTransform 모두 오버레이에보기를 추가합니다. 나는이 추가 명령의 순서에 대한 보증이 있다고 생각하지 않는다. 당신이 그것을 세트에 추가하는 것을 거꾸로하면 (그냥 사라지고 나서 공유된다면) 일하는 것입니다. transitionName은 잘못된 요소 (imageView의 컨테이너)에도 적용되었으므로 ChangeImageTransform이 작동하지 않습니다. –

+0

감사합니다. 작동합니다 (https://github.com/eugenkiss/MaterialEverywhere/commit/6599d6d42463710eb8422435ea7ef306360cf598)! – Eugen