web-dev-qa-db-ja.com

Transition Android fragment slide up

別のフラグメントを置き換えるフラグメントがあります。アニメーションを指定したい。ただし、アニメーションは無視されます。

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" />

私が本当に達成しようとしているのは、新しいフラグメントを下からスライドさせることです。私のアニメーションは無視されます。不足しているコードは何ですか?

25
user3093402
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" />
30
Tyler Davis

この質問が聞かれてからしばらく経ちましたが、ここに来た他の人々への答えがあります:

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).xdpiDisplayMetrics を参照)のように、OSの定数を使用することをお勧めします。しかし、私はAndroid開発をしばらくしていないので、どれを知っているのか分からない。

17
Kaschwenk

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();
11
Moaz H

現在、_Android.transition_を使用すると、fragment.enterTransition = Slide()またはfragment.enterTransition = Fade()と同じくらい簡単です。

注:最小バージョンL.

2
Ixx

R.animはそこでは動作しませんが、R.animatorは動作します。例えば

transaction.setCustomAnimations(Android.R.animator.fade_in, Android.R.animator.fade_out);
0
Rahul Singh