私は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でもテストしました。
ここで何が間違っているのでしょうか?
試行錯誤の末、ようやくこれが機能するようになりました。
まず第一に、最新の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+の両方で動作させるための鍵は、次のことです。
Android:hardwareAccelerated="true"
アプリケーションタグ内。フラグメントアニメーションがすべてのデバイスで機能するようになりました。アプリケーションタグに追加情報を設定しない場合、アニメーションは発生しますが、非常に途切れ途切れになり、まったく発生しなかったように見えます。
これが将来誰かを助けることを願っています!
注として、APIチェックツールがいくつかあるので、使用できないAPIを使用していないことを確認してください。 IDEは使用できないものを表示しないため、安定したコードを取得したら3.0でのコンパイルに戻ります。
最新の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();
setCustomAnimations
を呼び出す必要がありますbeforeフラグメントを追加します。これにより、異なるアニメーションで複数のフラグメントを追加できます。
フラグメントの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"
は、フラグメントレイアウトの下部を示します。
GoogleサポートライブラリにNineOldAndroidsサポートを追加しました。詳細については、 http://www.github.com/kedzie/Support_v4_NineOldAndroids を参照してください。これにより、フラグメントトランジション、PageTransformersなどのプロパティアニメーションを使用できます。
これが誰かを助けることを願っています。 APIのドキュメントでは、フラグメントアニメーションにobjectAnimatorを使用していますが、最新の互換パッケージでも、xmlのobjectAnimatorはコンパイラに受け入れられませんでした。
これは私のために働く:
Android 3.0以降:res/animatorフォルダーでxml objectAnimatorを宣言します。
3.0未満の互換性パッケージの場合:res/animフォルダでxmlアニメーションを宣言します。