2016-05-27 6 views
2

私のシナリオは次のとおりです。Androidでトランジション付きのDialogFragmentを起動するには?

ActivityMainActivityは、FABです。ユーザーがFABをクリックすると、フルスクリーンDialogFragmentが開きます。いくつかのトランジションでDialogFragmentを開きたいと思います。

ここまで私が試したコードです。

//MainActivity.java 

final FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); 
fab.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View view) { 

    ReviewDialog reviewDialog = ReviewDialog.newInstance(); 
    Slide slide = new Slide(); 
    slide.setSlideEdge(Gravity.LEFT); 
    slide.setDuration(1000); 
    reviewDialog.setEnterTransition(slide); 
    Bundle bundle =ActivityOptions.makeSceneTransitionAnimation(ScrollingActivity.this) 
     .toBundle(); 
    reviewDialog.setArguments(bundle); 
    reviewDialog.show(getSupportFragmentManager(),"review"); 
    } 
}); 

次に、DialogFragment ReviewDialogのコードを示します。

//ReviewDialog.java 
    public class ReviewDialog extends DialogFragment { 
    static ReviewDialog newInstance() { 
    ReviewDialog f = new ReviewDialog(); 

    // Supply num input as an argument. 
    Bundle args = new Bundle(); 
    f.setArguments(args); 
    return f; 
    } 

    @Override 
    public void onActivityCreated(Bundle arg0) { 
    super.onActivityCreated(arg0); 
    Slide slide = new Slide(); 
    slide.setSlideEdge(Gravity.LEFT); 
    slide.setDuration(1000); 
    getDialog().getWindow().setEnterTransition(slide); 
    getDialog().getWindow().setExitTransition(slide); 
    getDialog().getWindow().setReenterTransition(slide);} 

    @Override 
    public void onCreate(Bundle bundle){ 
    super.onCreate(bundle); 
    setStyle(DialogFragment.STYLE_NORMAL,R.style.DialogTheme); 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
    View v = inflater.inflate(R.layout.dialog_review, container, false); 
    return v; 
    } 

} 

はまた、私はこの問題は、ReviewDialogが開始されたとき、それは任意の遷移を示していないで、私のAndroidManifest.xml

<item name="android:windowContentTransitions">true</item> 

で次のプロパティを設定しました。 私はさまざまなアクティビティ間でトランジションを表示できますが、アクティビティとフラグメント間のトランジションを表示することは非常に困難です。 DialogFragmentの開始時にトランジションを表示する方法は?

+0

このHTTPを参照してください。 //stackoverflow.com/questions/13402782/show-dialogfragment-with-animation-growing-from-a-point – Ironman

+0

@アイロン回答:リンクに記載されている質問は2012年に戻ってきましたが、回答のほとんどは2013年です。明らかに、すべての回答はロリポップの移行が発表される前に書かれていました。私はロリポップで提供される移行の助けを借りてこれを達成したいと思います。 – thedarkpassenger

+0

これを参照してください:http://stackoverflow.com/a/13537234/4628611 – Mehta

答えて

0

使用このライブラリ:それは活動を行うようhttps://github.com/lgvalle/Material-Animations

共有要素の移行は非常に類似した方法でフラグメントで動作します。

A)ウィンドウの内容遷移

値/のstyles.xml

<style name="MaterialAnimations" parent="@style/Theme.AppCompat.Light.NoActionBar"> 
    ... 
    <item name="android:windowContentTransitions">true</item> 
    ... 
</style> 

B)共通の遷移名を定義有効

レイアウト/ fragment_a.xml

<ImageView 
     android:id="@+id/small_blue_icon" 
     style="@style/MaterialAnimations.Icon.Small" 
     android:src="@drawable/circle" 
     android:transitionName="@string/blue_name" /> 

レイアウト/ fragment_b.xml

<ImageView 
     android:id="@+id/big_blue_icon" 
     style="@style/MaterialAnimations.Icon.Big" 
     android:src="@drawable/circle" 
     android:transitionName="@string/blue_name" /> 

C)共有要素

FragmentB fragmentB = FragmentB.newInstance(sample); 

// Defines enter transition for all fragment views 
Slide slideTransition = new Slide(Gravity.RIGHT); 
slideTransition.setDuration(1000); 
sharedElementFragment2.setEnterTransition(slideTransition); 

// Defines enter transition only for shared element 
ChangeBounds changeBoundsTransition = TransitionInflater.from(this).inflateTransition(R.transition.change_bounds); 
fragmentB.setSharedElementEnterTransition(changeBoundsTransition); 

getFragmentManager().beginTransaction() 
     .replace(R.id.content, fragmentB) 
     .addSharedElement(blueView, getString(R.string.blue_name)) 
     .commit(); 

有するフラグメントを開始し、これは最終的な結果である:

enter image description here

関連する問題