Android 如何实现从片段到另一个活动的共享元素转换

Android 如何实现从片段到另一个活动的共享元素转换,android,android-fragments,android-activity,android-transitions,shared-element-transition,Android,Android Fragments,Android Activity,Android Transitions,Shared Element Transition,我需要2个活动,其中1个活动有片段。我希望类似缩放的动画(共享元素转换)从Activity1中的片段开始,到Activity2结束 代码如下: 活动1: 活动1中的片段: @Override public void gridItemOnFragmentClicked(ImageView sharedImage) { Intent intent = new Intent(this, DestinationActivity.class); intent.putExtra(Con

我需要2个活动,其中1个活动有片段。我希望类似缩放的动画(共享元素转换)从Activity1中的片段开始,到Activity2结束

代码如下:

活动1:

活动1中的片段:

 @Override
  public void gridItemOnFragmentClicked(ImageView sharedImage) {
    Intent intent = new Intent(this, DestinationActivity.class);
    intent.putExtra(Constants.KEY_INTENT_TRANSITION_NAME,
        ViewCompat.getTransitionName(sharedImage));

    ActivityOptionsCompat options = ActivityOptionsCompat.makeSceneTransitionAnimation(
        this,
        sharedImage,
        ViewCompat.getTransitionName(sharedImage));

    startActivity(intent, options.toBundle());
  }
private void initializeGridView() {
    gridBinding.gridView.setLayoutManager(new GridLayoutManager(getActivity(), 3));
    gridBinding.gridView.setAdapter(new GridAdapter(getActivity(), this));
  }

  @Override
  public void onGridItemClick(ImageView sharedImageView) {
    activityView.gridItemOnFragmentClicked(sharedImageView);
  }
@Override
  public void onBindViewHolder(
          ViewHolder holder, int position) {
    ViewCompat.setTransitionName(holder.imageView, Constants.TRANSITION_NAME_IMAGE_TO_ACTIVITY);
    holder.imageView.setOnClickListener(v ->
        gridAcitvityView.onGridItemClick(holder.imageView));
  }
@Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    destBinding = DataBindingUtil.setContentView(this, R.layout.activity_destination);
    supportPostponeEnterTransition();
    initializeZoomView();
  }

  private void initializeZoomView() {
    Bundle extras = getIntent().getExtras();
    destBinding.destinationImageView
        .setTransitionName(extras.getString(Constants.KEY_INTENT_TRANSITION_NAME));
    supportStartPostponedEnterTransition();
    destBinding.destinationImageView
        .setImageDrawable(getResources().getDrawable(R.drawable.model));
  }
回收器适配器:

 @Override
  public void gridItemOnFragmentClicked(ImageView sharedImage) {
    Intent intent = new Intent(this, DestinationActivity.class);
    intent.putExtra(Constants.KEY_INTENT_TRANSITION_NAME,
        ViewCompat.getTransitionName(sharedImage));

    ActivityOptionsCompat options = ActivityOptionsCompat.makeSceneTransitionAnimation(
        this,
        sharedImage,
        ViewCompat.getTransitionName(sharedImage));

    startActivity(intent, options.toBundle());
  }
private void initializeGridView() {
    gridBinding.gridView.setLayoutManager(new GridLayoutManager(getActivity(), 3));
    gridBinding.gridView.setAdapter(new GridAdapter(getActivity(), this));
  }

  @Override
  public void onGridItemClick(ImageView sharedImageView) {
    activityView.gridItemOnFragmentClicked(sharedImageView);
  }
@Override
  public void onBindViewHolder(
          ViewHolder holder, int position) {
    ViewCompat.setTransitionName(holder.imageView, Constants.TRANSITION_NAME_IMAGE_TO_ACTIVITY);
    holder.imageView.setOnClickListener(v ->
        gridAcitvityView.onGridItemClick(holder.imageView));
  }
@Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    destBinding = DataBindingUtil.setContentView(this, R.layout.activity_destination);
    supportPostponeEnterTransition();
    initializeZoomView();
  }

  private void initializeZoomView() {
    Bundle extras = getIntent().getExtras();
    destBinding.destinationImageView
        .setTransitionName(extras.getString(Constants.KEY_INTENT_TRANSITION_NAME));
    supportStartPostponedEnterTransition();
    destBinding.destinationImageView
        .setImageDrawable(getResources().getDrawable(R.drawable.model));
  }
需要动画结束的活动2:

 @Override
  public void gridItemOnFragmentClicked(ImageView sharedImage) {
    Intent intent = new Intent(this, DestinationActivity.class);
    intent.putExtra(Constants.KEY_INTENT_TRANSITION_NAME,
        ViewCompat.getTransitionName(sharedImage));

    ActivityOptionsCompat options = ActivityOptionsCompat.makeSceneTransitionAnimation(
        this,
        sharedImage,
        ViewCompat.getTransitionName(sharedImage));

    startActivity(intent, options.toBundle());
  }
private void initializeGridView() {
    gridBinding.gridView.setLayoutManager(new GridLayoutManager(getActivity(), 3));
    gridBinding.gridView.setAdapter(new GridAdapter(getActivity(), this));
  }

  @Override
  public void onGridItemClick(ImageView sharedImageView) {
    activityView.gridItemOnFragmentClicked(sharedImageView);
  }
@Override
  public void onBindViewHolder(
          ViewHolder holder, int position) {
    ViewCompat.setTransitionName(holder.imageView, Constants.TRANSITION_NAME_IMAGE_TO_ACTIVITY);
    holder.imageView.setOnClickListener(v ->
        gridAcitvityView.onGridItemClick(holder.imageView));
  }
@Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    destBinding = DataBindingUtil.setContentView(this, R.layout.activity_destination);
    supportPostponeEnterTransition();
    initializeZoomView();
  }

  private void initializeZoomView() {
    Bundle extras = getIntent().getExtras();
    destBinding.destinationImageView
        .setTransitionName(extras.getString(Constants.KEY_INTENT_TRANSITION_NAME));
    supportStartPostponedEnterTransition();
    destBinding.destinationImageView
        .setImageDrawable(getResources().getDrawable(R.drawable.model));
  }

您没有在xml中的任何位置使用android:transitionName,也没有添加代码链接。只需在此处添加相关代码。为了回答您的问题,我建议您遵循一些教程。@ADM使用此处的相关代码编辑。另外,如果我在不使用碎片的情况下执行此操作,那么它工作正常。但在从Activity2回到Activity1中的片段时会产生问题。您提供的教程正在进行片段到片段或活动到活动的转换。没有碎片的活动。