我的MainActivity有一个RecyclerView和一个BottomNavigationView。 RecyclerView中的项目是CardViews。

当我单击被BottomNavigationView遮住一半的项目时(-将其称为BNV),它会在BNV上“弹出”,然后向上滑动以成为LaunchedActivity中的标题。

当退出LaunchedActivity时,它会向下滑动,越过BNV,然后“快速捕捉”回原位:

android - 共享内容重叠底部导航-LMLPHP

我怎么可以:

  • 共享内容似乎从BNV下方滑动,
    否则,
  • 使共享内容开始不可见,并在滑动到标题
  • 时淡出

    我尝试使用BNV的高度,尝试将sharedElementEnterTransition设置为Fade(),尝试使用BottomNavigation指定excludeTarget;我似乎无法使事情如我所愿。

    这是MainActivity的布局:
    <?xml version="1.0" encoding="utf-8"?>
    <android.support.constraint.ConstraintLayout
            xmlns:android="http://schemas.android.com/apk/res/android"
            xmlns:tools="http://schemas.android.com/tools"
            xmlns:app="http://schemas.android.com/apk/res-auto"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            tools:context=".MainActivity">
        <android.support.v7.widget.RecyclerView
                android:id="@+id/rv"
                android:layout_width="match_parent"
                android:layout_height="0dp"
                android:layout_marginStart="8dp"
                android:layout_marginEnd="8dp"
                android:layout_marginTop="8dp"
                android:layout_marginBottom="8dp"
                app:layout_constraintBottom_toTopOf="@+id/bottomNavigationView"
                app:layout_constraintEnd_toEndOf="parent"
                app:layout_constraintTop_toTopOf="parent"
                app:layout_constraintStart_toStartOf="parent"
                />
        <android.support.design.widget.BottomNavigationView
                android:id="@+id/bottomNavigationView"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                app:menu="@menu/navigation"
                app:layout_constraintBottom_toBottomOf="parent"
                app:layout_constraintEnd_toEndOf="parent"
                app:layout_constraintStart_toStartOf="parent"
               />
    </android.support.constraint.ConstraintLayout>
    

    Activity_launched在这里:
    <?xml version="1.0" encoding="utf-8"?>
    <android.support.design.widget.CoordinatorLayout
            xmlns:android="http://schemas.android.com/apk/res/android"
            xmlns:app="http://schemas.android.com/apk/res-auto"
            xmlns:tools="http://schemas.android.com/tools"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            tools:context=".LaunchedActivity">
    
        <android.support.design.widget.AppBarLayout
                android:layout_height="wrap_content"
                android:layout_width="match_parent"
                android:theme="@style/AppTheme.AppBarOverlay">
    
            <android.support.v7.widget.Toolbar
                    android:id="@+id/toolbar"
                    android:layout_width="match_parent"
                    android:layout_height="?attr/actionBarSize"
                    android:background="?attr/colorPrimary"
                    app:popupTheme="@style/AppTheme.PopupOverlay"/>
    
        </android.support.design.widget.AppBarLayout>
    
        <include layout="@layout/content_launched"/>
    
        <android.support.design.widget.FloatingActionButton
                android:id="@+id/fab"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="bottom|end"
                android:layout_margin="@dimen/fab_margin"
                app:srcCompat="@android:drawable/ic_dialog_email"/>
    
    </android.support.design.widget.CoordinatorLayout>
    

    并且content_launched:
    <?xml version="1.0" encoding="utf-8"?>
    <android.support.constraint.ConstraintLayout
            xmlns:android="http://schemas.android.com/apk/res/android"
            xmlns:tools="http://schemas.android.com/tools"
            xmlns:app="http://schemas.android.com/apk/res-auto"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            app:layout_behavior="@string/appbar_scrolling_view_behavior"
            tools:showIn="@layout/activity_launched"
            tools:context=".LaunchedActivity">
    
        <LinearLayout
                android:id="@+id/launched_header"
                android:transitionName="header" android:layout_width="0dp" android:layout_height="wrap_content"
                      app:layout_constraintTop_toTopOf="parent" app:layout_constraintStart_toStartOf="parent"
                      android:orientation="vertical" app:layout_constraintEnd_toEndOf="parent"
                      android:background="@android:color/holo_blue_bright"
                      android:layout_marginEnd="8dp">
            <TextView
                    android:text="TextView"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center"
                    android:id="@+id/launched_title"/>
            <TextView
                    android:text="TextView"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center"
                    android:id="@+id/launched_text"/>
        </LinearLayout>
    
    </android.support.constraint.ConstraintLayout>
    

    RecyclerView中的项目调用MainActivity.onItemClicked:
       fun onItemClicked(view: View, item: Item) {
            val intent = Intent(applicationContext, LaunchedActivity::class.java)
            intent.putExtra("ITEM", item)
            val options = ActivityOptions.makeSceneTransitionAnimation(
                this,
                android.util.Pair<View, String>(view, "header")
            )
            startActivity(intent, options.toBundle())
        }
    

    这是回收站中的阵列:
    data class Item(val title: String, val text: String): Serializable
    
    val itemList = listOf(Item("One", "1"), Item("Two", "2"),
            Item("Three", "3"), Item("Four", "4"), Item("Five", "5"))
    

    最后,这是来自LaunchedActivity.onCreate的:
       with(window) {
            requestFeature(Window.FEATURE_CONTENT_TRANSITIONS)
            requestFeature(Window.FEATURE_ACTIVITY_TRANSITIONS)
            sharedElementEnterTransition = AutoTransition()
            sharedElementExitTransition = AutoTransition()
        }
    

    LaunchedActivity.onCreate将项目从 Intent 中拉出,并设置launch_title和launchd_text。

    最佳答案

    添加recyclerView的商品的CardView

    app:cardMaxElevation="8dp"
    

    并提供您的BNV
    app:elevation="16dp"
    

    尝试一下,尝试使用更高的海拔差异,因为单击的Cardview的海拔高于实际的海拔

    09-03 20:46