別のフラグメントを置き換えるフラグメントがあります。アニメーションを指定したい。ただし、アニメーションは無視されます。
transaction.replace(R.id.my_fragment, newFrag);
transaction.addToBackStack(null);
transaction.setCustomAnimations(R.anim.slide_in_up, R.anim.slide_out_up);
slide_in_up
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:duration="@Android:integer/config_longAnimTime"
Android:fromYDelta="0%p"
Android:toYDelta="100%p" />
slide_out_up
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:duration="@Android:integer/config_longAnimTime"
Android:fromYDelta="100%p"
Android:toYDelta="0%p" />
私が本当に達成しようとしているのは、新しいフラグメントを下からスライドさせることです。私のアニメーションは無視されます。不足しているコードは何ですか?
transaction.setCustomAnimations(R.anim.slide_in_up, R.anim.slide_out_up);
transaction.addToBackStack(null);
transaction.replace(R.id.my_fragment, newFrag);
slide_in_up
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:duration="@Android:integer/config_longAnimTime"
Android:fromYDelta="100%p"
Android:toYDelta="0%p" />
slide_out_up
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:duration="@Android:integer/config_longAnimTime"
Android:fromYDelta="0%p"
Android:toYDelta="-100%p" />
この質問が聞かれてからしばらく経ちましたが、ここに来た他の人々への答えがあります:
setCustomAnimation()
の前にreplace()
呼び出しを呼び出す必要がある限り、e1daは正しいです。そうしないと、アニメーションは表示されません。
2番目の問題は、おそらくビューアニメーションではアニメーション化できないネイティブフラグメントを使用していることです。
次のファイルを使用します。
slide_in_up.xml
_<?xml version="1.0" encoding="utf-8"?>
<set xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:fillAfter="true" >
<objectAnimator
Android:duration="500"
Android:propertyName="y"
Android:valueFrom="1280"
Android:valueTo="0"
Android:valueType="floatType" />
</set>
_
slide_out_up.xml
_<?xml version="1.0" encoding="utf-8"?>
<set xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:fillAfter="true" >
<objectAnimator
Android:duration="500"
Android:propertyName="y"
Android:valueFrom="0"
Android:valueTo="-1280"
Android:valueType="floatType" />
</set>
_
少し説明:
サポートフラグメントのビューアニメーションとネイティブフラグメントのプロパティアニメーションを区別する必要があります。
アニメーションを見る:
Android 3.0より前のビューをアニメーション化する方法です。これのサンプルコードは、user3093402による_slide_in.xml
_および_slide_up.xml
_です。
_<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:duration="@Android:integer/config_longAnimTime"
Android:fromYDelta="0%p"
Android:toYDelta="100%p" />
_
ビューアニメーションではフラグメントをアニメーション化できないことに注意してください。これの例外は、サポートライブラリ(Android.support.v4.app.Fragment)からのフラグメントです。
プロパティアニメーション
これはAndroid 3.0。の後にオブジェクトをアニメーション化する方法です。xmlファイルとしても宣言されますが、「valueAnimator」タグを使用します(objectAnimatorはvalueAnimatorを拡張します)。これは、ネイティブフラグメント(Android.app.Fragment)をアニメーション化する方法です。
こちらもご覧ください:
お役に立てれば、
カイ
[〜#〜] edit [〜#〜]:Raphael Royer-Rivardが指摘したように、固定画面サイズは悪い習慣です。 getWindowManager().getDefaultDisplay().getMetrics(metrics).xdpi
( DisplayMetrics を参照)のように、OSの定数を使用することをお勧めします。しかし、私はAndroid開発をしばらくしていないので、どれを知っているのか分からない。
slide_in_upのコード:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:Android="http://schemas.Android.com/apk/res/Android">
<translate xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:duration="@Android:integer/config_mediumAnimTime"
Android:fromYDelta="100%p"
Android:toYDelta="0%p" />
</set>
slide_in_downのコード:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:Android="http://schemas.Android.com/apk/res/Android">
<translate xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:duration="@Android:integer/config_mediumAnimTime"
Android:fromYDelta="0%p"
Android:toYDelta="100%p" />
</set>
slide_out_upのコード:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:Android="http://schemas.Android.com/apk/res/Android">
<translate
Android:duration="@Android:integer/config_mediumAnimTime"
Android:fromXDelta="0"
Android:toYDelta="100%" />
</set>
slide_out_downのコード:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:Android="http://schemas.Android.com/apk/res/Android">
<translate
Android:duration="@Android:integer/config_mediumAnimTime"
Android:fromXDelta="0"
Android:toYDelta="-100%" />
</set>
その後、アクティビティまたはフラグメントセットのアニメーションで次のようになります。
Fragment fragment = new Fragment();
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.setCustomAnimations(R.anim.slide_in_up, R.anim.slide_in_down, R.anim.slide_out_down, R.anim.slide_out_up);
transaction.replace(container, fragment).commit();
現在、_Android.transition
_を使用すると、fragment.enterTransition = Slide()
またはfragment.enterTransition = Fade()
と同じくらい簡単です。
注:最小バージョンL.
R.animはそこでは動作しませんが、R.animatorは動作します。例えば
transaction.setCustomAnimations(Android.R.animator.fade_in, Android.R.animator.fade_out);