我正在尝试实现sharedElement以将imageView从一个活动动画到另一个活动,但我的问题是我的imageView在recyclelerView标头内,因此它没有动画。
所以我的问题是,有没有办法实现这个目标?
我在PlayStore上看过很多应用程序
代码: 在开始第二次活动时
String transitionName = getString(R.string.demo);
ActivityOptionsCompat transitionActivityOptions = ActivityOptionsCompat.makeSceneTransitionAnimation(mContext, v, transitionName);
startActivity(intent, transitionActivityOptions.toBundle());
我已经设定:
ViewCompat.setTransitionName(icon, convertView.getContext().getString(R.string.demo));
到我的第一个活动网格和第二个活动recyclerView
标题
答案 0 :(得分:1)
如果您的First acitivty imageview转换名称必须是唯一的,才能使转换动画生效。在Recycler网格onBindView方法中,您必须使用下面的代码分别为每个imageview分配转换名称
holder.gridImageView.setTransitionName("gridImageTransition" + position);
将位置添加到每个网格图像转换名称以使其唯一。
在ActivityOptionsCompat中transitionActivityOptions = ActivityOptionsCompat.makeSceneTransitionAnimation(mContext,v,transitionName);
此转换名称应与使用
在第二个活动中分配给Recycler视图标题的转换名称相同 You will have to set the sharedTransition name for the imageView in your header after it has been inflated. Like below. Setting in xml wont work for the reason that it wont be immediately inflated.
在您的回收器适配器的onBindViewHolder中使用
holder.imageView.setTransitionName(transition);
答案 1 :(得分:0)
如果您的MainActivity有RecyclerView
适配器,请执行以下操作:
public class MainActivity extends Activity {
private SampleRecyclerViewAdapter adapter;
public void onCreate(Bundle savedBundle) {
RecyclerView recycleView = (RecyclerView) findViewById(R.id.recycle_view);
SampleRecyclerViewAdapter(this);
recycleView.setAdapter(adapter);
}
}
在适配器类中,
public class public class SampleRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
Context mContext;
public SampleRecyclerViewAdapter(Context ctx) {
this.mContext = ctx;
}
@Override
public final RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
// Initiate ViewHolder and return it.
return null;
}
@Override
public void onBindViewHolder(VH viewHolder, int i) {
viewHolder.view.setOnClickListener(
new OnClickListener() {
@Override
public void onClick() {
ActivityOptionsCompat transitionActivityOptions =
ActivityOptionsCompat.makeSceneTransitionAnimation(this.mContext, viewHolder.view, transitionName);
startActivity(intent, transitionActivityOptions.toBundle());
ViewCompat.setTransitionName(icon, convertView.getContext().getString(R.string.demo));
}
}
);
}
}
在此代码中,SharedElementTransition
代码在适配器类中实现。