Android 带有浮动操作按钮支架的共享元素转换

Android 带有浮动操作按钮支架的共享元素转换,android,android-transitions,activity-transition,Android,Android Transitions,Activity Transition,我有一个RecyclerView,有些卡片上每个都有一个微型浮动操作按钮。单击卡时,卡上的图像和晶圆厂将用于共享元素转换 在执行返回转换时,浮动动作按钮会“捕捉”回其原始位置,而不是像其预期的那样很好地设置动画 下面是显示问题的gif: 启动活动和转换的我的代码: Intent intent = new Intent(mContext, PlayActivity.class); Pair<View, String> p1 = Pair.create(

我有一个
RecyclerView
,有些卡片上每个都有一个微型浮动操作按钮。单击卡时,卡上的图像和晶圆厂将用于共享元素转换

在执行返回转换时,浮动动作按钮会“捕捉”回其原始位置,而不是像其预期的那样很好地设置动画

下面是显示问题的gif:

启动活动和转换的我的代码:

Intent intent = new Intent(mContext, PlayActivity.class);

                Pair<View, String> p1 = Pair.create((View)holder.coverArt, "coverArt");
                Pair<View, String> p2 = Pair.create((View) holder.fab, "fab");
                ActivityOptionsCompat options = ActivityOptionsCompat.
                        makeSceneTransitionAnimation(mActivity, p1, p2);

                mContext.startActivity(intent, options.toBundle());
Intent Intent=新的Intent(mContext,PlayActivity.class);
Pair p1=Pair.create((视图)holder.coverArt,“coverArt”);
Pair p2=Pair.create((视图)holder.fab,“fab”);
ActivityOptionsCompat选项=ActivityOptionsCompat。
makeSceneTransitionAnimation(mActivity,p1,p2);
startActivity(intent,options.toBundle());
卡片上的迷你晶圆厂:

<android.support.design.widget.FloatingActionButton
            android:id="@+id/fab"
            app:fabSize="mini"
            android:layout_height="wrap_content"
            android:layout_width="wrap_content"
            app:layout_anchor="@id/coverArt"
            app:layout_anchorGravity="bottom|right|end"
            android:src="@drawable/ic_favorite"
            android:layout_margin="16dp"
            android:clickable="true"
            android:transitionName="fab"/>

活动中的那个:

<android.support.design.widget.FloatingActionButton
        android:id="@+id/fab"
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        app:layout_anchor="@id/coverArt"
        app:layout_anchorGravity="bottom|right|end"
        android:src="@drawable/ic_favorite"
        android:layout_margin="16dp"
        android:clickable="true"
        android:transitionName="fab"/>


编辑:我想增加奖金,但由于某些原因,该功能似乎没有在SO中实现。我很确定我可以在正确答案上加上额外的赏金点数,所以我会再加上+50。谢谢

步骤:您需要自定义详细布局,然后过渡动画才能完美工作。像

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="275dp">

        <ImageView
            android:id="@+id/picture"
            android:layout_width="match_parent"
            android:layout_height="250dp"
            android:fitsSystemWindows="true"
            android:scaleType="centerCrop"
            android:transitionName="picture"
            app:layout_collapseMode="parallax" />

        <android.support.design.widget.FloatingActionButton
            android:id="@+id/fabButton"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:layout_alignParentRight="true"
            android:layout_marginBottom="5dp"
            android:layout_marginRight="16dp"
            android:src="@mipmap/like"
            android:transitionName="fabButton"
            app:fabSize="normal" />

    </RelativeLayout>

</FrameLayout>


注意:您可以自定义布局和图像的大小。

尝试按如下所述保持窗口和片段退出/进入转换:

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

和共享元素转换为:

<?xml version="1.0" encoding="utf-8"?>
<transitionSet xmlns:android="http://schemas.android.com/apk/res/android"
           android:duration="500"
           android:interpolator="@android:interpolator/decelerate_cubic">
    <changeBounds>
    <arcMotion
        android:maximumAngle="90"
        android:minimumHorizontalAngle="90"
        android:minimumVerticalAngle="0" />

    </changeBounds>
</transitionSet>


我不确定ImageView以外的任何东西是否具有正确的过渡效果。我尝试了上次创建的自定义视图,在进入过渡时遇到了类似的问题,而return则非常完美。

到底是什么问题?@LukeSalamone系统没有正确调整过渡。正如您在返回过渡中所看到的,fab向下设置动画,但它们会向左捕捉到其原始位置,而不是通常的平滑过渡。您是否想过使用
覆盖过渡()
?不确定这有什么关系。您是否建议编写自定义转换动画并覆盖im已经使用的动画?看起来活动中包含listview的容器比它转换到的容器小。你需要在其中一项活动中更改晶圆厂的右边距。我不确定这将如何解决这个问题。你能解释一下你的解决方案吗?请先试试这个.FAB扩展ImageView。无论如何,这似乎不起作用,我相当肯定
是必需的。