为什么我的 activity 转换不起作用?

Why is my activity transition not working?

我想将 EditText 从 1 activity 动画化到另一个。这是我在第一个 activity:

上的编辑文本
<EditText
        android:id="@+id/urlEditText"
        android:layout_width="0dp"
        android:layout_height="40dp"
        app:layout_constraintTop_toBottomOf="@id/topLayout"
        android:background="@drawable/gray_rounded"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        android:layout_marginHorizontal="25dp"
        android:hint="Search or type a type a url"
        android:paddingEnd="20dp"
        android:drawableStart="@drawable/search"
        android:drawablePadding="10dp"
        android:paddingStart="10dp"
        android:layout_marginTop="25dp"
        android:transitionName="shift"/>

这是我的第二个 activity:

<EditText
        android:id="@+id/urlEditText"
        android:layout_width="0dp"
        android:layout_height="40dp"
        android:background="@drawable/gray_rounded"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        android:layout_marginHorizontal="25dp"
        android:hint="Search or type a type a url"
        android:paddingEnd="20dp"
        android:drawableStart="@drawable/search"
        android:drawablePadding="10dp"
        android:paddingStart="10dp"
        android:layout_marginTop="25dp"
        android:transitionName="shift"/>

但是,在第一个中,它位于底部,在第二个 activity 中,它位于顶部。这是我尝试启动动画的方式:

Intent intent = new Intent(MainActivity.this,FullSearchActivity.class);
ActivityOptionsCompat activityOptions= ActivityOptionsCompat.
   makeSceneTransitionAnimation(this,binding.urlEditText,"shift");

ActivityCompat.startActivity(this,intent,activityOptions.toBundle());

但是这并没有打开第二个activity。为了验证它是否打开,我尝试在第二个 activity 中显示吐司。 toast 已显示,但第二个 activity 未显示。为什么会这样?

编辑

这是我的完整 ResultActivity 代码:

public class ResultActivity extends AppCompatActivity {
    
    ActivityResultBinding binding;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        binding = ActivityResultBinding.inflate(getLayoutInflater());
        setContentView(binding.getRoot());
    }
}

PS: FullSearchActivity 已被我重命名为 ResultActivity

这是 Kotlin 中的工作代码。您可以将其转换为 Java.

val animationIntent = Intent("FIRST ACTIVITY", SECOND ACTIVITY::class.java)
    mViewBinding.apply {
        val options = ViewCompat.getTransitionName("EDIT TEXT ID HERE OF FIRST ACTIVITY")?.let {
            ActivityOptionsCompat.makeSceneTransitionAnimation(
                this@FIRST ACTIVITY,
                "EDIT TEXT ID HERE OF FIRST ACTIVITY",
                it
            )
        }
        startActivity(animationIntent, options?.toBundle())
    }

Specify custom transitions

首先,当您定义从 material 主题继承的样式时,使用 android:windowActivityTransitions 属性启用 window 内容转换。您还可以在样式定义中指定进入、退出和共享元素转换:

<style name="BaseAppTheme" parent="android:Theme.Material">
  <!-- enable window content transitions -->
  <item name="android:windowActivityTransitions">true</item>

  <!-- specify enter and exit transitions -->
  <item name="android:windowEnterTransition">@transition/explode</item>
  <item name="android:windowExitTransition">@transition/explode</item>

  <!-- specify shared element transitions -->
  <item name="android:windowSharedElementEnterTransition">
    @transition/change_image_transform</item>
  <item name="android:windowSharedElementExitTransition">
    @transition/change_image_transform</item>
</style>

更多:https://developer.android.com/training/transitions/start-activity