如何在RecyclerView中实现共享元素转换到onClickListener?

时间:2016-03-21 18:23:33

标签: java android shared-element-transition

我目前正在关注此tutorial以在RecyclerView和活动中的视图(卡片)之间实现共享元素转换,但我不知道我怎么能这样做,因为我' m在MyRecyclerAdapter类上使用onClickListener来启动新活动。 刚刚开发中的新功能,希望你能帮助我。

MyRecyclerAdapter.java

public class MyRecyclerAdapter extends RecyclerView.Adapter<PaletteViewHolder> {

private Context context;
private List<Palette> palettes;

public MyRecyclerAdapter(Context context, List<Palette> palettes) {
    this.palettes = new ArrayList<Palette>();
    this.palettes.addAll(palettes);
    this.context = context;
}

@Override
public PaletteViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
    View itemView = LayoutInflater.
            from(viewGroup.getContext()).
            inflate(R.layout.card_view, viewGroup, false);

    itemView.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            Intent intent = new Intent(context, ScrollingActivity.class);
            intent.putExtra("P25", "Longanissa");
            context.startActivity(intent);


        }
    });
    return new PaletteViewHolder(itemView);
}

@Override
public void onBindViewHolder(PaletteViewHolder paletteViewHolder, int i) {
    Palette palette = palettes.get(i);
    paletteViewHolder.titleText.setText(palette.getName());
    paletteViewHolder.contentText.setText(palette.getHexValue());
    paletteViewHolder.card.setCardBackgroundColor(palette.getIntValue());
}

@Override
public int getItemCount() {
    return palettes.size();
}

animateIntent方法:

public void animateIntent(View view) {

// Ordinary Intent for launching a new activity
Intent intent = new Intent(this, YourSecondActivity.class);

// Get the transition name from the string
String transitionName = getString(R.string.transition_string);

// Define the view that the animation will start from
View viewStart = findViewById(R.id.card_view);

ActivityOptionsCompat options =

ActivityOptionsCompat.makeSceneTransitionAnimation(this,
                viewStart,   // Starting view
                transitionName    // The String
        );
//Start the Intent
ActivityCompat.startActivity(this, intent, options.toBundle());

1 个答案:

答案 0 :(得分:0)

您需要在onBindViewHolder中设置视图的转换名称。它需要与其他viewHolder不同,所以得到一种方法使它变得与众不同(如果调色板名称是唯一的,则使用palette.getName()或使用i)。

然后你需要使用提供的视图启动里面的活动:

ActivityOptionsCompat options = ActivityOptionsCompat.makeSceneTransitionAnimation(context, v, v.getTransitionName());
context.startActivity(intent, options.toBundle());

我不明白你为什么需要animateIntent方法。希望它仍然有帮助