42

私はv4アンドロイド互換ライブラリを使用して、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(); 

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

使用:

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モトローラXoomの、ギャラクシータブ2.3 7" 、2.2エミュレータ上で、さらには2.3.4とHTCのG2でこれをテストしてみた。

をここで間違っている可能性は何?

+0

dalvik(デバッガ)は何かを提供していますか? – IAmYourFaja

+0

私たちに与えるためにlogcat出力がありますか? –

+0

何も、それはなぜ失われたthats。エラーはありません。 Logcatは何も表示しません。システムの通常のコールバックだけで、アプリ内の変更には何も関係しません。 mTransitionの値を調べると、4099になります。 この値は、次の値で設定されます。 ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE); – blindstuff

答えて

35

私は最終的にこれを得ました。多くの試行錯誤の後に働く不具合

まず最初に、最も新しいACLを取得し、カスタムアニメーションを修正しましたが、これは私の正確な問題ではありませんでしたが、いったん動作してしまえば標準のトランジションの代わりに使用しました。

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

を、それが2.1、2.2および2.3のAndroidだけでなく、Androidの3.0+の両方で動作することへの鍵は、次の操作を実行することでした:

  • メイクを

    は今使用してイムあなたがサポートしたい最低のAPIレベル(私の場合2.1)で利用できるAPIのみを使用していることを確かめてください。

  • Android 3.0を使用してコンパイルします。
  • マニフェストファイルで、アプリケーションタグ内にandroid:hardwareAccelerated="true"と設定します。

フラグメントアニメーションがすべてのデバイスで機能するようになりました。アプリケーションタグに余分な情報を設定しないと、アニメーションが実行されますが、非常に不安定な方法で、まったく起こらなかったように見えます。

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

メモとして、利用可能なAPIを使用していないことを確認しているので、いくつかのAPIチェックツールがあります。私は2で作業することを好む。私は安定したコードを持っていれば、私は3.0でコンパイルすることに戻ります。

+0

この回答をお寄せいただきありがとうございます.SII、HTC evo、Nexus Galaxy、SIIIでテストしました.Nexusがアニメーションに遅れているのを見て恐ろしく、ハードウェアタグはすべて期待通りに動作します:) – Goofyahead

+0

@blindstuffサポートしているAPIレベルの下位レベルのコードを使用すると、新しいAPIをコンパイルする必要はありません。より新しいAPIに対してコンパイルする唯一のことは、新しいクラスとメソッドにアクセスできることです。 –

+2

'android:hardwareAccelerated =" true "'を認識させるには、3.0以上でコンパイルする必要があります。 – blindstuff

32

なって試してみてください最新のACLは再び、彼らはそれを修正した: http://code.google.com/p/android/issues/detail?id=15623#c19

また、私はsetCustomAnimationsのために、それはトランザクションを有効にするために置き換えるように呼び出す前に設定する必要があることに気づいた

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(); 
+0

私はあなたが説明する両方のことをした、私はコメントに私の質問にフォローアップを与えるように述べました。私はそれが既に働くようにしましたが、100%確実ではないという答えを出す前にテストしています。私はギャラクシータブで動作するようにしました.XOOMでは、アニメーションはうんざりのように見えます。 – blindstuff

+0

申し訳ありませんが、私は他の人の投稿にコメントできませんでした(評判が足りません)。あなたがそれを解決したと聞いてうれしい! – dvd

+0

あなたの助けをありがとう、+ 1'ed、それの代わりに 'ft.setCustomAnimations(R.anim.in_from_left、R.anim.out_to_right、R.anim.in_from_right、R.anim.out_to_left); 'ft.setCustomAnimations(R.anim.in_from_left、R.anim.out_to_right); ' – blindstuff

0

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

これが私の作品:アンドロイド3.0以上の場合

:RES /アニメーターフォルダ内のxml objectAnimatorを宣言。

互換性パッケージが3.0未満の場合:xmlアニメーションをres/animフォルダに宣言します。フラグメントのためtop_to_bottomアニメーションを実行するための

3

はtop_to_bottom_fragment.xml valueFrom="-800"があなたのフラグメントレイアウトの下部を示す

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

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(); 

にトップを行うことが同じ従ってください。

3

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

2

setCustomAnimationsに電話をしてからを追加する必要があります。これにより、異なるアニメーションで複数のフラグメントを追加することができます。

関連する問題