2017-09-11 3 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:

活動Aから活動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); 

    } 
} 

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); 

    } 
} 
関連する問題