2017-09-11 1 views
0

내 앱에서 액티비티 A에서 액티비티 B로가는 통로에 애니메이션을 적용하고 싶습니다. 특히, 버튼을 클릭하면 액티비티 A가 밖으로 나오고 액티비티 B는 페이드 인하 고 뒤로 버튼을 클릭하면 페이드 아웃하기 위해 액티비티 B가 들어가고 액티비티 A가 들여 오기를 원합니다. 음, 첫 번째 애니메이션 (밖으로 슬라이드 - 페이드 인) 잘 작동합니다. 그러나 뒤로 버튼을 클릭하면 애니메이션이 트리거되지만 때로는 활동 B와 빈 화면이 사라지는 것을 볼 수있는 대부분의 시간에는 활동 A가 전혀 나타나지 않습니다. 무엇이 잘못 될 수 있습니까?finishAfterTransition()이 제대로 작동하지 않습니다.

활동 A : :

 @Override 
     protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.activity_main); 
      if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { 
      setupWindowAnimations(); 
     } 
... 
} 
@Override 
protected void setupWindowAnimations() { 

if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) { 
    Slide slide = new Slide(); 
    slide.setDuration(1000); 
    slide.setSlideEdge(Gravity.RIGHT); 
    getWindow().setExitTransition(slide); 
    getWindow().setReenterTransition(slide); 
} 

}

활동 B : 버튼에

@Override 
protected void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 
    setLayout(R.layout.file_browser); 
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { 
     setupWindowAnimations(); 
    } 
...} 
@Override 
protected void setupWindowAnimations() { 
    if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) { 
     Fade fade = new Fade(); 
     fade.setDuration(1000); 
     getWindow().setEnterTransition(fade); 
     getWindow().setReturnTransition(fade); 

    } 
} 

클릭 활동 A에서 활동 B를 시작합니다

fab.setOnClickListener(new View.OnClickListener() { 
     @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP) 
     @Override 
     public void onClick(View v) { 
      ActivityOptions options = ActivityOptions.makeSceneTransitionAnimation(ActivityA.this); 
      Intent intent = new Intent(ActivityA.this,ActivityB.class); 
      startActivity(intent, options.toBundle()); 

     }}); 
여기 내 코드입니다

뒤로 버튼의 방법 :

@Override 
public boolean onSupportNavigateUp(){ 

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { 

     finishAfterTransition(); 

    } 
    return true; 

} 

나는 뭔가를 잃어 버렸을 것입니다. 내가 알아낼 수있게 도와 주길 바래. 미리 감사드립니다.

+0

나를 위해 잘 작동합니다. 무슨 문제인가? 수정 사항을 찾았습니까? 돌아올 때 활동 A가 왼쪽에서 오른쪽으로 전환과 함께 호출됩니다. – AskQ

답변

0

put getWindow(). setAllowEnterTransitionOverlap (false); 활동 B에서은 다음과 같습니다.

protected void setupWindowAnimations() { 
    if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) { 
     Fade fade = new Fade(); 
     fade.setDuration(1000); 
     getWindow().setEnterTransition(fade); 
     getWindow().setReturnTransition(fade); 
     getWindow().setAllowEnterTransitionOverlap(false); 

    } 
} 
관련 문제