最新バージョンのサポートライブラリを使用して、Android<3.0のバージョンを実行しているデバイスでフラグメントを使用できるようにしています。現在のフラグメントを切り替えたいときはいつでも、次のコードを使用して切り替えます。
public void displayFragmentInMainView(Fragment f) {
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.setCustomAnimations(R.anim.slide_in_right, R.anim.slide_out_left,
android.R.anim.slide_in_left, android.R.anim.slide_out_right);
transaction.replace(R.id.fragment_holder, f);
transaction.commit();
}
遷移アニメーションの1つを定義するXMLは次のとおりです。
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate android:fromXDelta="-50%p" android:toXDelta="0"
android:duration="500"/>
<alpha android:fromAlpha="0.0" android:toAlpha="1.0"
android:duration="500" />
</set>
上記のXMLでわかるように、アニメーションの継続時間は500に設定されています。開発者向けドキュメントによると、ここで指定されている単位はミリ秒(時間の尺度)です。
テストを通じて、アニメーションの長さがデバイス間で異なることに気づきました。期間にms値を指定している場合、なぜこれが当てはまるのですか?
これが私がテストしたデバイスと結果(主観的)です:
HTC Legend :(遅いCPUを搭載したローエンドの電話、Android 2.3.3)アニメーションはスムーズで、私が望む限り正確に持続します。
サムスンギャラクシーS :(ミッドレンジCPU、Android 2.1)アニメーションはやや途切れ途切れで、レジェンドよりも速くなります
エミュレーター:(クアッドコアiMac、Android 4.0で実行)アニメーションは非常に高速で、場合によっては非常に高速で、表示されないこともあります。
これに基づくと、継続時間は実際にはミリ秒単位で測定されているのではなく、CPU速度に依存しているようです。他の誰かが同様の結果に気づきましたか?ドキュメントを読んだ後に予想されるように、アニメーション速度がデバイス間で均一になるように設定する方法はありますか?