【问题标题】:Shared element transition in RecyclerViewRecyclerView 中的共享元素转换
【发布时间】:2016-12-06 08:28:42
【问题描述】:

我正在尝试在 RecyclerView 上使用共享元素转换,但它似乎不起作用。

这是我使用 makeSceneTransitionAnimation() 的适配器的一部分:

public void onBindViewHolder(final BookViewHolder holder, final int position) {
        holder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent(context, DetailsActivity.class);
                ActivityOptionsCompat optionsCompat = ActivityOptionsCompat.makeSceneTransitionAnimation((Activity)context , holder.smallThumbnail, "thumbnailTransition");
                context.startActivity(intent, optionsCompat.toBundle());
            }
        }
}

【问题讨论】:

  • 同时添加你的DetailsActivity的代码
  • @vinayManeti 它看起来是相同的代码,除了它在活动中使用并且我在适配器中使用它。
  • @user3333848 DetailsActivity 中没有与转换相关的内容。我只是在那里显示一个 ImageView。

标签: android android-recyclerview


【解决方案1】:

在您的适配器中

holder.smallThumbnail.setTransitionName("thumbnailTransition");
Pair<View, String> pair1 = Pair.create((View) holder.smallThumbnail, holder.smallThumbnail.getTransitionName());

ActivityOptionsCompat optionsCompat = ActivityOptionsCompat.makeSceneTransitionAnimation((Activity) mContext, pair1, pair2);
mContext.startActivity(intent, optionsCompat.toBundle());

在您的详细活动中

getWindow().setSharedElementEnterTransition(TransitionInflater.from(this).inflateTransition(R.transition.shared_element_transation));
mainImage.setTransitionName("thumbnailTransition");

这里这个主图像是你想要转换你以前的活动缩略图的图像视图

shared_element_transation 在 res>transition 中创建一个 xml

<?xml version="1.0" encoding="utf-8"?>
<transitionSet xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="500">
<changeBounds />
<fade />
</transitionSet>

【讨论】:

  • 我在 (Activity) mContext 收到 ClassCastException,说“应用程序无法转换为 Activity”
  • 使用活动上下文可能是您将应用程序上下文传递给适配器,或者第二种方法是制作回调接口并在活动中执行代码
  • 如何传递活动上下文而不是应用程序上下文?
  • 当你将上下文传递给适配器时,在 getApplicationContex() 中使用 ActvityName.this
  • pair2 是什么?
【解决方案2】:

与毕加索合作

适配器

holder.smallImageView.setTransitionName("transition_name");
ActivityOptionsCompat optionsCompat = ActivityOptionsCompat.makeSceneTransitionAnimation(context, holder.smallImageView, "transition_name");

Intent intent = new Intent(context, DetailActivity.class);
context.startActivity(intent, optionsCompat.toBundle());

详细活动

Picasso.with(context)
    .load(url)
    .into(bigImageView, new Callback() {
        @Override
        public void onSuccess() {
            bigImageView.setTransitionName("transition_name");
            getWindow().setSharedElementEnterTransition(TransitionInflater.from(context).inflateTransition(R.transition.shared_element_transition));
        }

        @Override
        public void onError() {

        }
    });

res/transition/shared_element_transition.xml

<?xml version="1.0" encoding="utf-8"?>
<transitionSet xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="500">
    <changeBounds />
    <fade />
</transitionSet>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多