新しいフラグメントが表示されたときに、フラグメントを部分的に非表示にしたいと考えています。
Gmail Honeycomb App のような Fragment Animationで参照されているように、GitHub の ScienceGuy のコードに基づいて構築しています。
3 つのフラグメントから始めます。左端の重みは 6、中央の重みは 4、右端の重みは 4 です。weightSum を 10 に設定すると、左と中央のフラグメントが表示され、右端は画面外になります。これが私が欲しいものです。
ユーザーが中央のフラグメントのアイテムを選択すると、左のフラグメントを遷移させて、その 3 分の 2 が画面の左側からはみ出すようにします。重みがあるので、実質的には 2、4、4 になります。この時点で、右側のフラグメントが画面上に完全に移動しました。
ScienceGuy のコードを使用すると、左のフラグメントがスクロール オフしたときに右のフラグメントを表示できますが、左のフラグメントは完全に消えます。
次のコードを使用してみました。
final float middleFragmentWidth = getMiddleFragment().getView().getWidth();
ObjectAnimator animIn = ObjectAnimator.ofFloat(null, "x",
-middleFragmentWidth/2, 0).setDuration(
trans.getDuration(LayoutTransition.APPEARING));
trans.setAnimator(LayoutTransition.APPEARING, animIn);
ObjectAnimator animOut = ObjectAnimator.ofFloat(null, "x", -middleFragmentWidth,
-middleFragmentWidth/2).setDuration(
trans.getDuration(LayoutTransition.CHANGE_DISAPPEARING));
trans.setAnimator(LayoutTransition.DISAPPEARING, animOut);
フラグメントを「非表示」にすると、フラグメントが完全に非表示になることを Android が想定していると思われます。フラグメントをアニメーション化して、実際には非表示にせず、部分的に画面外に表示する方法はありますか?
または、3 つのフラグメントを HorizontalScrollView に入れ、それをアニメーション化することもできます。ただし、中央と右のほとんどのフラグメントにはリストビューが含まれており、ドキュメントに従って、HorizontalScrollView 内でリストビューを使用することは避けるべきであるため、私はそれを行っていません。