Android 如何实现从片段到另一个活动的共享元素转换
我需要2个活动,其中1个活动有片段。我希望类似缩放的动画(共享元素转换)从Activity1中的片段开始,到Activity2结束 代码如下: 活动1: 活动1中的片段: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
@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中的片段时会产生问题。您提供的教程正在进行片段到片段或活动到活动的转换。没有碎片的活动。