7

Android Lollipop の新しい Activity Transitions を使いたいです。しかし、現在、アニメーション中に非常に奇妙なヒックアップが見られます。考えられる最小のサンプルをハッキングしました。

これは私が非常に短いバージョンで行ったことです:

  1. 私のウィンドウコンテンツの遷移を有効にしましたstyles.xml
  2. 私のスタイルでは非常に単純なslide.xml終了トランジションを参照しました
  3. android:transitionName両方のレイアウトで共有要素に を提供
  4. ActivityOptions.makeSceneTransitionAnimation()その名前と共有したいビューで呼び出されます
  5. 結果のバンドルをに渡しましたstartActivity()

これが私が見た動作です (アニメーションの速度を 10 倍遅くしてみてください)。スライド アニメーションが共有されていないビューを下にスライドする直前に、それらのビューが少し下にジャンプします。彼らは実際には少し離れて移動します。

しかし:これは、そのアニメーションを2回目に実行したときにのみ発生します(その後は毎回)。最初のパスは問題ないようです。また、これは要素を次のアクティビティと共有したい場合にのみ発生します。要素を共有しようとしなければ、すべてうまくいきます。

これが私のコードです:

値/styles.xml

<resources>
<style name="AppTheme" parent="android:Theme.Material.Light">
    <!-- enable window content transitions -->
    <item name="android:windowContentTransitions">true</item>

    <!-- specify exit transition -->
    <item name="android:windowExitTransition">@transition/slide</item>
</style>
</resources>

transition/slide.xml

<slide />

メインアクティビティのレイアウト

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

        <View
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1"
            android:background="#0000ff" />

        <View
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1"
            android:background="#00ff00" />

        <View
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1"
            android:background="#0000ff" />

        <View
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1"
            android:background="#00ff00" />

    </LinearLayout>

    <!-- the actual element I want to share -->
    <View
        android:id="@+id/view"
        android:layout_width="56dp"
        android:layout_height="56dp"
        android:background="#ff0000"
        android:elevation="8dp"
        android:transitionName="view" />

</RelativeLayout>

MainActivity.java

public class MainActivity extends Activity implements View.OnClickListener {

    View mView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mView = findViewById(R.id.view);
        mView.setOnClickListener(this);
    }

    @Override
    public void onClick(View view) {
        ActivityOptions options = ActivityOptions.makeSceneTransitionAnimation(this, mView, "view");

        Intent intent = new Intent(this, SecondaryActivity.class);
        startActivity(intent, options.toBundle());
    }


}
4

1 に答える 1