新的Shared Transition API不适用于Imageview,从一个回收站视图到另一个回收站视图

时间:2016-04-08 06:20:51

标签: android android-5.0-lollipop android-transitions

我正在尝试实现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标题

2 个答案:

答案 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代码在适配器类中实现。