android - 共享元素过渡

标签 android animation material-design android-5.0-lollipop

我在 RecyclerView 中有一个图标,左边是一些文本。当你点击它时,一个新的 Activity 开始与那个项目相对应,在标题栏的中心有相同的图标和它正下方的文本。我想在这里实现共享元素转换,以便图标的两个位置之间可以平滑移动,看起来标题栏从该图标展开。知道我该怎么做吗?像这样:https://developer.android.com/design/material/videos/ContactsAnim.mp4

最佳答案

这是我 friend 的示例代码

ListView或RecyclerView的单项

item.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_margin="16dp">

    <ImageView
        android:id="@+id/imageView"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:layout_centerHorizontal="true"
        android:src="@drawable/img"
        android:transitionName="@string/transition_name"/>

    <TextView
        android:id="@+id/textView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/imageView"
        android:text="txt"
        android:textSize="18sp"/>

    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/textView"
        android:layout_alignParentEnd="true"
        android:layout_alignParentRight="true"
        android:text="BUTTON TEXT"/>

</RelativeLayout>

detail_activity.xml

    <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_margin="16dp">

    <ImageView
        android:id="@+id/imageView"
        android:layout_width="250dp"
        android:layout_height="250dp"
        android:layout_alignParentEnd="true"
        android:layout_alignParentRight="true"
        android:layout_alignParentBottom="true"
        android:src="@drawable/img"
        android:transitionName="@string/transition_name"/>

    <EditText
        android:id="@+id/editText"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentStart="true"
        android:layout_alignParentLeft="true"
        android:hint="Some Hint"/>

    <ImageView
        android:id="@+id/smallerImageView"
        android:src="@drawable/img2"/>

</RelativeLayout>

在Activity代码中设置的ListView中的onItemClickListner如下

imgContainerView.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            ActivityOptionsCompat options = ActivityOptionsCompat.
                    makeSceneTransitionAnimation(this, imageView, getString(R.string.activity_image_trans));
            startActivity(intent, options.toBundle());
        }
        else {
            startActivity(intent);
        }
    }
});

SharedElement 转换的关键点是要设置动画的元素的 xml 属性。

android:transitionName="@string/activity_image_trans"

两个布局的过渡名称应该相同。

****注:** ** Shared Element Transition 仅支持 Lolipop 及更高版本的 Android。

关于android - 共享元素过渡,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34853298/

相关文章:

android - 让Android中的App做HTTPs CA签名验证

java - 编译 Android 应用程序时出错 - 任务 :app:transformClassesWithDexForDebug 执行失败

ios - iOS中的水滴动画

android-appcompat - Android Material Design 工具栏和 FAB 按钮交叉

java - 为什么我的 file.exists() 总是返回 false?

android - 无法完全正确地获得 Spanable

html - 我的带有 animated.css 的 html/css 元素中没有动画

javascript - 使用 Javascript 使背景淡入淡出

material-design - Flutter:如何让卡片可点击?

android - 在 Transitions-Everywhere 库中使用过渡方法