2

마스터/디테일 패턴을 사용 중이며 현재 Android Lollipop으로 이동 중입니다. 내 ListView에서 항목을 클릭하면 new activity transistions 중 하나를 갖고 싶습니다. 애니메이션은 작동하지만 공유 된 요소 (내 경우 ImageView)간에 특정 애니메이션을 만드는 방법을 모르겠습니다.Android에서 ListView의 액티비티 애니메이션 소재 디자인이 적용된 롤리팝

내 사용자 지정 ListView (이미지 및 텍스트 포함)에서 행을 클릭하면 전환이 내 DetailActivtiy의 이미지로 전환되어야합니다. http://youtu.be/RhiPJByIMrM?t=2m41s 또는이 비디오 :

<ImageView 
      android:transitionName="@string/transition_title_image"/> 

내 ListActivity :

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    if (Build.VERSION.SDK_INT >= 21) { 
     //To enable window content transitions in your code instead, call the Window.requestFeature() method: 
     getWindow().requestFeature(android.view.Window.FEATURE_CONTENT_TRANSITIONS); 
     Transition ts_enter = new Slide(); //Slide(); //Explode(); 
     Transition ts_exit = new Explode(); 

     ts_enter.setDuration(2000); 
     ts_exit.setDuration(2000); 
     /* 
     If you have set an enter transition for the second activity, 
     the transition is also activated when the activity starts. 
     */ 
     getWindow().setEnterTransition(ts_enter); 
     getWindow().setExitTransition(ts_exit); 
    } 
    super.onCreate(savedInstanceState); 

이 방법을 사용하여 http://youtu.be/XkWI1FKKrs4

나는 이미 내 ImageViews의 모두에이 코드를 추가 그것은이 비디오에 같이한다 내 상세 정보 호출 :

if (Build.VERSION.SDK_INT >= 21) { 
     Intent intent = new Intent(ArticleListActivity.this, ArticleDetailActivity.class); 
     intent.putExtra("pos", id); 
     intent.putExtra("articleList", articleList); 
     String transitionName = getString(R.string.transition_title_image); 
     ImageView article_thumb = (ImageView) findViewById(R.id.article_thumb); 

     ActivityOptionsCompat options = 
       ActivityOptionsCompat.makeSceneTransitionAnimation(ArticleListActivity.this, 
         article_thumb, // The view which starts the transition 
         transitionName // The transitionName of the view we’re transitioning to 
       ); 
     ActivityCompat.startActivity(ArticleListActivity.this, intent, options.toBundle()); 
    } 

내 De tailActivity :

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    if (Build.VERSION.SDK_INT >= 21) { 
     //To enable window content transitions in your code instead, call the Window.requestFeature() method: 
     getWindow().requestFeature(android.view.Window.FEATURE_CONTENT_TRANSITIONS); 
     Transition ts_enter = new Slide(); //Slide(); //Explode(); 
     Transition ts_exit = new Explode(); //Slide(); //Explode(); 

     ts_enter.setDuration(2000); 
     ts_exit.setDuration(2000); 

     getWindow().setEnterTransition(ts_enter); 
     getWindow().setExitTransition(ts_exit); 
    } 
    super.onCreate(savedInstanceState) 

;

+0

그래도 문제는 무엇인지 설명하지 않았습니다. 애니메이션은 현재 어떤 모습입니까? 결함이 발생합니까? 귀하의 코드에서 당신은'setEnterTransition()'과'setExitTransition()'을 사용하여 컨텐트 전환을 설정했지만 공유 요소 전환을 어디에 설정합니까? –

+0

또한보고있는 문제에 대해 설명하는 데 어려움이있는 경우 자신의 응용 프로그램 비디오를 게시하는 것이 좋습니다. Android Studio에는 편리하게 사용할 수있는 매우 유용한 비디오 캡처 도구가 있습니다. –

+1

[**이 블로그 게시물 **] (http://www.androiddesignpatterns.com/2014/12/activity-fragment-transitions-in-android-lollipop-part1.html)이 유용 할 수 있습니다. –

답변

0

이 시도 :

먼저
  1. , 첫 번째 활동에 고유 전환 이름을 각 ImageView를 제공해야합니다. 모든 이미지보기의 전환 이름이 같으면 프레임 워크는 애니메이션이 시작될 때 어떤 프레임을 선택해야하는지 알 수 없으며 전환이 올바르게 작동하지 않습니다.

  2. ImageView을 클릭하면 고유 전환 이름이 Intent 엑스트라 활동 세부 정보로 전달됩니다.

  3. 세부 활동 액티비티의 onCreate() 메서드에서 인 텐트 번들에서 이름을 검색하고 ImageView의 전환 이름으로 설정합니다.

+0

단지 개조하면 : 특별한 의도에서 고유 한 전환 이름을 사용해서는 안됩니다. 세부 활동에 사용 된 전환 이름을 사용해야합니다. 고유 한 이름은 자동으로 연관되어 돌아 오면 액티비티가 다시 작성된 경우에도 공유 요소와 연결할 뷰가 프레임 워크에 있음을 알 수 있습니다. ApiDemos에는 도움이 될 간단한 예제가 있습니다. –

+0

@GeorgeMount 나는 당신이 의미하는 바를 정확히 이해하고 있는지 확신 할 수 없습니다. "ApiDemos"로,이 샘플 프로젝트를 의미합니까? https://github.com/googlesamples/android-ActivitySceneTransitionBasic –

+0

@GeorgeMount ApiDemos [** 여기 **] (https://android.googlesource.com/platform/development/+/master/samples/ApiDemos/)를 찾았습니다. src/com/example/android/apis/animation /). 그러나, 나는 아직도 왜이 상황에서'SharedElementCallback'을 사용하여 공유 요소를 매핑 할 필요가 있는지 혼란 스럽습니다 ...대신'Intent' 안의 호출 된 액티비티에 공유 엘리먼트를 전달하는 것이 잘못된 것일까 요? 활동 중 하나가 시스템에 의해 파괴되고 다시 만들어지면 일종의 상태 손실 관련 버그가 발생할 가능성이 있다는 것을 의미합니까? 내가 놓친 게 있니? –