[解決済み】フラグメント間の遷移をアニメーション化する
質問
フラグメント間の遷移をアニメーション化しようとしています。私は以下のような答えを得ました。
Android フラグメントとアニメーション
FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.setCustomAnimations(R.anim.slide_in_left, R.anim.slide_out_right);
DetailsFragment newFragment = DetailsFragment.newInstance();
ft.replace(R.id.details_fragment_container, newFragment, "detailFragment");
// Start the animated transition.
ft.commit();
そして、私のR.anim.slide_in_left。
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate android:fromXDelta="50%p" android:toXDelta="0"
android:duration="@android:integer/config_mediumAnimTime"/>
<alpha android:fromAlpha="0.0" android:toAlpha="1.0"
android:duration="@android:integer/config_mediumAnimTime" />
</set>
しかし、これを試したところ、次のように表示されました。
02-08 16:27:37.961: ERROR/AndroidRuntime(1717): FATAL EXCEPTION: main
02-08 16:27:37.961: ERROR/AndroidRuntime(1717): java.lang.RuntimeException: Unknown animator name: translate
02-08 16:27:37.961: ERROR/AndroidRuntime(1717): at android.animation.AnimatorInflater.createAnimatorFromXml(AnimatorInflater.java:129)
02-08 16:27:37.961: ERROR/AndroidRuntime(1717): at android.animation.AnimatorInflater.createAnimatorFromXml(AnimatorInflater.java:126)
02-08 16:27:37.961: ERROR/AndroidRuntime(1717): at android.animation.AnimatorInflater.createAnimatorFromXml(AnimatorInflater.java:93)
02-08 16:27:37.961: ERROR/AndroidRuntime(1717): at android.animation.AnimatorInflater.loadAnimator(AnimatorInflater.java:72)
02-08 16:27:37.961: ERROR/AndroidRuntime(1717): at android.app.FragmentManagerImpl.loadAnimator(FragmentManager.java:621)
02-08 16:27:37.961: ERROR/AndroidRuntime(1717): at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:733)
02-08 16:27:37.961: ERROR/AndroidRuntime(1717): at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:919)
02-08 16:27:37.961: ERROR/AndroidRuntime(1717): at android.app.BackStackRecord.run(BackStackRecord.java:578)
02-08 16:27:37.961: ERROR/AndroidRuntime(1717): at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1217)
何か思い当たることはありますか?ハニカムのAPIリファレンスを確認したところ
translate
があります。何を見落としたのでしょうか?
他にフラグメント間の遷移をアニメーション化する方法はないのでしょうか?
ありがとうございます。
どのように解決するのですか?
を使用する必要があります。
android.animation
フレームワーク (オブジェクトアニメーター) と
FragmentTransaction.setCustomAnimations
と同様に
FragmentTransaction.setTransition
.
以下は
setCustomAnimations
をApiDemosの
フラグメントハイドショー(FragmentHideShow.java)
:
ft.setCustomAnimations(android.R.animator.fade_in, android.R.animator.fade_out);
そして以下は、関連するアニメーター XML です。 res/animator/fade_in.xml :
<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:interpolator/accelerate_quad"
android:valueFrom="0"
android:valueTo="1"
android:propertyName="alpha"
android:duration="@android:integer/config_mediumAnimTime" />
を使用すると、複数のアニメーターを組み合わせることができます。
<set>
古いアニメーションフレームワークでできたのと同じように。
EDIT : スライドイン/スライドアウトについて質問されているので、ここでコメントします。
スライドインとスライドアウト
をアニメーション化することはもちろん可能です。
translationX
,
translationY
,
x
および
y
プロパティがありますが、一般的にスライドは画面外との間でコンテンツをアニメーションさせることを含みます。私の知る限り、相対値を使用するトランジション・プロパティは存在しません。しかし、これは自分で記述することを妨げるものではありません。プロパティのアニメーションは、アニメーションさせるオブジェクト(この場合はビュー)のゲッターとセッターのメソッドを必要とするだけであることを忘れないでください。
自分で
getXFraction
と
setXFraction
メソッドをビューのサブクラスで使用します。
public class MyFrameLayout extends FrameLayout {
...
public float getXFraction() {
return getX() / getWidth(); // TODO: guard divide-by-zero
}
public void setXFraction(float xFraction) {
// TODO: cache width
final int width = getWidth();
setX((width > 0) ? (xFraction * width) : -9999);
}
...
}
これで、「xFraction」プロパティをアニメーション化すると、次のようになります。
res/animator/slide_in.xml :
<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/linear_interpolator"
android:valueFrom="-1.0"
android:valueTo="0"
android:propertyName="xFraction"
android:duration="@android:integer/config_mediumAnimTime" />
アニメートするオブジェクトの幅が親と同じでない場合、見た目が悪くなるので、使用するケースに合わせてプロパティの実装を調整する必要があるかもしれません。
関連
-
[解決済み】Android: Intent エラーを処理するアクティビティは見つかりませんでしたか?どのように解決するのか
-
[解決済み】Dalvikとdalvik-cacheとは何ですか?
-
[解決済み】findViewByIDがnullを返す。
-
[解決済み] Androidのgravityとlayout_gravityの違いは何ですか?
-
[解決済み] 複数のデバイスを接続しているときにADB Shellを使用するには?error: more than one device and emulator "で失敗します。
-
[解決済み] Androidのソフトキーボードをプログラムで閉じる/隠すにはどうすればよいですか?
-
[解決済み] インスタンス状態の保存を使用してアクティビティ状態を保存するにはどうすればよいですか?
-
[解決済み] match_parentとfill_parentの違いは何ですか?
-
[解決済み] なぜフラグメントなのか、そしてアクティビティの代わりにフラグメントを使用するのはどんなときか?
-
[解決済み】「px」、「dip」、「dp」、「sp」の違いは?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Android: Intent エラーを処理するアクティビティは見つかりませんでしたか?どのように解決するのか
-
[解決済み】Edit Textのandroid:ems属性とは何ですか?[重複しています]
-
[解決済み】Android Studioの初回起動。Android SDKアドオンリストにアクセスできない
-
[解決済み] Android Studioで「URIが登録されていません」と報告されるのはなぜですか?[クローズド]
-
[解決済み] SDKの場所がandroid studioで見つからない
-
[解決済み] android.support.design.widget.FloatingActionButton クラスの展開に失敗しました。
-
[解決済み] Gradle DSL メソッドが見つかりません:'compile()'
-
[解決済み] ADBエラー:デーモンに接続できない
-
[解決済み] Android M パーミッション : shouldShowRequestPermissionRationale()関数の使用方法について混乱しています。
-
[解決済み】Android Fragmentとアニメーション