46

私はv4android互換性ライブラリを使用して、Android2.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.1MotorolaXoom、2.3 Galaxy Tab 7 "、2.2エミュレーター、さらには2.3.4のHTCG2でテストしました。

ここで何が間違っている可能性がありますか?

4

6 に答える 6

38

多くの試行錯誤の末、ようやくこれを機能させることができました。

何よりもまず、最新の 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 レベル (私の場合は 2.1) で利用できる API のみを使用していることを確認してください。
  • Android 3.0 を使用してコンパイルします。
  • マニフェスト ファイルで、android:hardwareAccelerated="true"アプリケーション タグ内に設定します。

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

これが将来誰かに役立つことを願っています!

注意として、API チェック ツールがいくつかあるので、利用できない API を使用していないことを確認してください。私は 2.1 で作業することを好み、使用できないものは IDE に表示されないようにします。コードが安定したら、3.0 でのコンパイルに戻ります。

于 2011-10-25T16:28:19.550 に答える
35

最新の 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();
于 2011-10-24T23:41:31.467 に答える
5

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

于 2015-06-04T04:10:13.747 に答える
4

フラグメントの 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"フラグメント レイアウトの下部を示します。

于 2012-11-27T11:11:10.180 に答える
3

Google サポート ライブラリに NineOldAndroids のサポートを追加しました。詳細については、 http://www.github.com/kedzie/Support_v4_NineOldAndroidsを参照してください。Fragment Transitions、PageTransformers、およびその他のものに Property Animations を使用できます。

于 2013-05-27T03:33:45.160 に答える
0

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

これは私のために働く:

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

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

于 2012-04-12T03:53:59.353 に答える