私は、Transitions APIを使用して2つのViewGroup間で共有要素をアニメーション化しようとしています。目標は、緑色のビューが新しい位置に向かって '親の境界から外れて'移動することです。ネストされた共有要素を使用したシーン遷移
私は、次のようなレイアウトがあります。しかし、私はこれを取得することはできません
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<FrameLayout
android:layout_width="200dp"
android:layout_height="200dp"
android:background="#f00">
<View
android:id="@+id/myview"
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_gravity="center"
android:background="#0f0" />
</FrameLayout>
<FrameLayout
android:layout_width="200dp"
android:layout_height="200dp"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:background="#00f" />
</RelativeLayout>
:
first.xml
:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<FrameLayout
android:layout_width="200dp"
android:layout_height="200dp"
android:background="#f00" />
<FrameLayout
android:layout_width="200dp"
android:layout_height="200dp"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:background="#00f">
<View
android:id="@+id/myview"
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_gravity="center"
android:background="#0f0" />
</FrameLayout>
</RelativeLayout>
second.xml
を正しく機能します。デフォルトのトランジションではすべてがフェードアウトしますが、ChangeBounds
トランジションは何も行わず、ChangeTransform
も正しく表示されません。
私が使用しているコード:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
final ViewGroup root = (ViewGroup) findViewById(android.R.id.content);
setContentView(R.layout.first);
View myView1 = findViewById(R.id.myview);
myView1.setTransitionName("MYVIEW");
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
View second = LayoutInflater.from(MainActivity.this).inflate(R.layout.second, root, false);
View myView2 = second.findViewById(R.id.myview);
myView2.setTransitionName("MYVIEW");
Scene scene = new Scene(root, second);
Transition transition = new ChangeTransform();
transition.addTarget("MYVIEW");
transition.setDuration(3000);
TransitionManager.go(scene, transition);
}
}, 2000);
}
は今、私は手動でViewOverlay
を使用してアニメーションを自分で作成することによってこれを行うことができると思います。しかし、私はTransitions APIを使って解決策を探しています。これも可能ですか?
また、階層を「平坦化」するつもりはありません。より複雑なユースケースを考慮して、ビューを意図的に入れ子にしています。
ですAndroidトランジションAPIが意図されています。 – keyboardsurfer