web-dev-qa-db-ja.com

アニメーション化されていないフラグメント標準遷移

私はv4 Android互換性ライブラリを使用して、Android 2.2以降のデバイス用のフラグメントを使用してタブレットUIを開発しています。

すべてが正常に機能していますが、アニメーションを動作させることができず、標準のアニメーションでさえ動作しません。

コード:

FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
    ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
    ABCFragment abcFragment = new ABCFragment();
    ft.replace(R.id.main_frame_layout_fragment_holder,abcFragment);     
    ft.addToBackStack(null);
    ft.commit();

トランジットアニメーションを使用する代わりに、フラグメントは約1秒間フリーズし、ちょうど消えて新しいフラグメントが表示されます。

を使用して:

ft.setCustomAnimations(Android.R.anim.slide_in_left,Android.R.anim.slide_out_right);

動作しません。

XML:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:app="http://schemas.Android.com/apk/res/com.synergygb.mycustomapp"
Android:id="@+id/LinearLayout01" Android:layout_width="fill_parent"
Android:layout_height="fill_parent" Android:orientation="vertical"
Android:gravity="bottom">
<FrameLayout Android:layout_width="fill_parent" Android:layout_height="fill_parent" Android:id="@+id/main_frame_layout_fragment_holder">
</FrameLayout>
<!-- OTHER FIXED UI ELEMENTS-->
</RelativeLayout>

互換性ライブラリでカスタムアニメーションが壊れていることを読みましたが、標準のトランジションに問題がある人はいないようです。これを3.2.1 Motorola Xoom、2.3 Galaxy Tab 7 "、2.2エミュレーターでテストしました。さらに、2.3.4のHTC G2でもテストしました。

ここで何が間違っているのでしょうか?

44
blindstuff

試行錯誤の末、ようやくこれが機能するようになりました。

まず第一に、最新のACLを取得し、カスタムアニメーションを修正しました。これは私の正確な問題ではありませんでしたが、それらが機能したら、標準遷移の代わりにそれらを使用することになりました。

今私は使用しています:

ft.setCustomAnimations(Android.R.anim.fade_in,Android.R.anim.fade_out,Android.R.anim.fade_in,Android.R.anim.fade_out);

Android 2.1、2.2、2.3、およびAndroid 3.0+の両方で動作させるための鍵は、次のことです。

  • サポートしたい最も低いAPIレベルで使用可能なAPIのみを使用していることを確認してください(私の場合は2.1)。
  • Android 3.0。
  • マニフェストファイルで、Android:hardwareAccelerated="true"アプリケーションタグ内。

フラグメントアニメーションがすべてのデバイスで機能するようになりました。アプリケーションタグに追加情報を設定しない場合、アニメーションは発生しますが、非常に途切れ途切れになり、まったく発生しなかったように見えます。

これが将来誰かを助けることを願っています!

注として、APIチェックツールがいくつかあるので、使用できないAPIを使用していないことを確認してください。 IDEは使用できないものを表示しないため、安定したコードを取得したら3.0でのコンパイルに戻ります。

36
blindstuff

最新のACLを再度取得してみて、修正済みです。 http://code.google.com/p/Android/issues/detail?id=15623#c19

また、setCustomAnimationsの場合、有効にするには、replaceなどのトランザクション呼び出しの前に設定する必要があることに気付きました。

FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.setCustomAnimations(R.anim.in_from_left, R.anim.out_to_right, R.anim.in_from_right, R.anim.out_to_left);
ft.replace(Android.R.id.content, newFrag);
ft.addToBackStack(null);
ft.commit();
34
dvd

setCustomAnimationsを呼び出す必要がありますbeforeフラグメントを追加します。これにより、異なるアニメーションで複数のフラグメントを追加できます。

4
Greg Ennis

フラグメントのtop_to_bottomアニメーションを実行するには、

上から下に同じことを行います

FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.setCustomAnimations(R.anim.top_to_bottom_fragment,
Android.R.animator.fade_out); ft.replace(R.id.simple_fragment,
fragment); 
ft.commit();

top_to_bottom_fragment.xml

<objectAnimator Android:duration="400" Android:valueFrom="-800"
    Android:valueTo="0" Android:propertyName="y"
    Android:valueType="floatType"
    xmlns:Android="http://schemas.Android.com/apk/res/Android" />

どこ valueFrom="-800"は、フラグメントレイアウトの下部を示します。

4
CoDe

GoogleサポートライブラリにNineOldAndroidsサポートを追加しました。詳細については、 http://www.github.com/kedzie/Support_v4_NineOldAndroids を参照してください。これにより、フラグメントトランジション、PageTransformersなどのプロパティアニメーションを使用できます。

3
mark.kedzierski

これが誰かを助けることを願っています。 APIのドキュメントでは、フラグメントアニメーションにobjectAnimatorを使用していますが、最新の互換パッケージでも、xmlのobjectAnimatorはコンパイラに受け入れられませんでした。

これは私のために働く:

Android 3.0以降:res/animatorフォルダーでxml objectAnimatorを宣言します。

3.0未満の互換性パッケージの場合:res/animフォルダでxmlアニメーションを宣言します。

0
Gunnar Karlsson