标签: shared-element-transition

Android共享元素转换前21

如何在21之前的设备中实现共享元素转换?我或多或少地遵循了这里的指南http://antonioleiva.com/material-design-everywhere/但我得到的错误就像"属性transitionName仅用于api级别21或更高级别"

android android-activity activity-transition shared-element-transition

5
推荐指数
1
解决办法
8646
查看次数

多视图活动转换

Android Lolipop有一个api,允许在不同活动中的共享元素之间轻松转换.

活动过渡

看起来这个api不支持具有多个视图的转换.有没有办法使用相同的API?

编辑

根据@pskink的建议,我使用了不同的方法

    ActivityOptions options = ActivityOptions
            .makeSceneTransitionAnimation(this, Pair.create((View)view, "viewPager"), Pair.create((View) fab, "fab"));
    startActivity(intent, options.toBundle());
Run Code Online (Sandbox Code Playgroud)

这从ActivityA到ActivityB工作正常,但点击后退按钮会导致此堆栈跟踪

   A/OpenGLRenderer(17305): requireSurface() called but no surface set!
 A/libc(17305): Fatal signal 6 (SIGABRT), code -6 in tid 17349(RenderThread)
        Build fingerprint: 'google/hammerhead/hammerhead:5.0/LRX21O/1570415:user/release-keys'
        Revision: '11'
        ABI: 'arm'
        pid: 3364, tid: 3414, name: RenderThread  >>> com.example.package <<<
        signal 6 (SIGABRT), code -6 (SI_TKILL), fault addr --------
        Abort message: 'requireSurface() called but no surface set!'
            r0 00000000  r1 00000d56  r2 00000006  r3 00000000
            r4 9e9b5db8  r5 …
Run Code Online (Sandbox Code Playgroud)

android activity-transition shared-element-transition

5
推荐指数
0
解决办法
1962
查看次数

Lollipop通过键盘调整大小重新进入重新输入活动的元素转换

我正在处理两个活动之间的Lollipop过渡.我有一个共享元素,我通过活动A和B的转换动画.在活动B中弹出一个键盘并调整窗口大小.进入活动B时动画看起来很棒.问题是当返回活动时A共享元素转换看起来很糟糕,因为窗口大小仍然基于键盘调整大小的程度(即使键盘在返回时自动最小化) A并且最终窗口的大小正确).

我已经尝试在离开活动B并调用finishAfterTransition之前手动隐藏软输入.不幸没有运气!我也尝试推迟共享元素转换,但这也没有奏效.一个解决方案是在用户按下以完成活动B时有一个微小的延迟(10ms),以便在离开之前给窗口时间调整自己的大小,但这对我来说感觉很糟糕.

任何想法非常感谢!

android android-5.0-lollipop shared-element-transition

5
推荐指数
0
解决办法
420
查看次数

Android Lollipop 过渡中的动画文本颜色

我们正在尝试进行转换,将一个 Activity 的 TextView 移动到另一个 Activity 的另一个 TextView。常见的令人敬畏的 Android Lollipop 过渡,用于动画共享视图。

在我们的场景中,第一个 TextView 是白色的,第二个是红色的。它也有不同的尺寸。

共享视图的过渡

我们遇到的问题是,如果我们仔细观察动画并使用慢动作动画中的手机,我们可以看到白色 TextView 没有做任何动画。取而代之的是,红色的 TextView 出现在白色的上面,然后动画到最终位置。

我们想要实现的是在白色 TextView 移动到红色时淡出它,并从白色 TextView 淡入红色,同时对其进行动画处理。嗯……你知道的,效果令人难以置信:·)

为了实现它,我们在主题定义中使用转换:

    <item name="android:windowSharedElementEnterTransition">@transition/auto_transition</item>
    <item name="android:windowSharedElementExitTransition">@transition/auto_transition</item>
Run Code Online (Sandbox Code Playgroud)

并且,在我们的 auto_transition.xml 文件中:

<transitionSet xmlns:android="http://schemas.android.com/apk/res/android">
  <autoTransition/>
</transitionSet>
Run Code Online (Sandbox Code Playgroud)

但是,可以肯定的是,这不是 Android 人希望它工作的方式。

如果有人有任何见解,将不胜感激。谢谢!

android-5.0-lollipop activity-transition shared-element-transition

5
推荐指数
0
解决办法
558
查看次数

从TextView到EditText的共享元素转换错误

我试图在转换之后在一个TextView和一个EditText´ but when showing the resulting Activity the text in theEditView have been shifted up. See attached pictures. Also, clicking on theEditView` 之间进行Android共享转换,将文本恢复到正确的位置.

首先单击RecylcerView中的任何行:

在此输入图像描述

单元视图,日期TextEdit和名称TextEdit将共享给下一个活动.单元格背景将转换为工具栏.

在此输入图像描述

启动活动单元格布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:id="@+id/adapter_actionlist"
              android:orientation="vertical"
              android:layout_width="match_parent"
              android:layout_height="wrap_content"
              android:clickable="true"
              android:focusable="true"
              android:background="?android:attr/selectableItemBackground"
              android:transitionName="@string/transition_key_action" >

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

        <CheckBox
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/adapter_actionList_checkBox"
            android:layout_alignParentStart="true"
            android:layout_centerVertical="true"
            android:layout_marginLeft="12dp"/>

        <LinearLayout
            android:orientation="vertical"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentEnd="true"
            android:layout_centerVertical="true"
            android:layout_alignParentStart="true"
            android:layout_marginLeft="72dp"
            android:layout_marginRight="16dp">

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:maxLines="2"
                android:ellipsize="end"
                android:textAppearance="?android:attr/textAppearanceMedium"
                android:text="Large Text"
                android:id="@+id/adapter_actionlist_toplabel"
                android:paddingTop="0dp"
                android:paddingBottom="0dp" …
Run Code Online (Sandbox Code Playgroud)

android android-transitions shared-element-transition

5
推荐指数
0
解决办法
575
查看次数

重新打开堆栈中的现有活动时的共享元素过渡

我从那里打开一个活动A,然后打开活动B,并将共享元素传递给它。它可以动画化过渡效果,但是当我返回到活动A,然后再次进入活动B时(仍使用

intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
Run Code Online (Sandbox Code Playgroud)

共享元素转换未运行。

对于常规动画,您可以在onNewIntent中调用overridePendingTransition()来运行动画。/sf/answers/582896401/

我尝试在那里调用startPostponedEnterTransition(),但是什么也没发生。

这是我的代码,允许过渡

void allowWindowTransitions(){
Window w = getWindow();
w.requestFeature(Window.FEATURE_ACTIVITY_TRANSITIONS);  
Run Code Online (Sandbox Code Playgroud)

启动活动的代码

intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
    ActivityOptionsCompat options = ActivityOptionsCompat.
            makeSceneTransitionAnimation(this, sharedElement, "profile");

startActivity(intent, options.toBundle());
Run Code Online (Sandbox Code Playgroud)

我试过弄乱setSharedElementReturnTransition和setSharedElementReenterTransition,但是什么也没发生。

有没有一种方法可以手动触发共享元素转换来解决此问题。

android android-activity android-transitions shared-element-transition

5
推荐指数
1
解决办法
321
查看次数

共享元素转换通过导航栏

我试图使用共享元素转换在两个屏幕之间设置动画.下面是我的代码的相关部分(可能更多也不相关)但我已经削减了一些以节省空间.

activity_main.xml中:

<android.support.v4.widget.DrawerLayout 
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <android.support.design.widget.CoordinatorLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:fitsSystemWindows="true">

        <android.support.design.widget.AppBarLayout ... >
            ...
        </android.support.design.widget.AppBarLayout>

        <fragment 
            android:id="@+id/fragment"
            android:name=".MainFragment"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            app:layout_behavior="@string/appbar_scrolling_view_behavior"
            tools:layout="@layout/fragment_main" />

    </android.support.design.widget.CoordinatorLayout>

    <android.support.design.widget.NavigationView ... />

</android.support.v4.widget.DrawerLayout>
Run Code Online (Sandbox Code Playgroud)

fragment_main.xml:

<android.support.v7.widget.RecyclerView
    android:id="@+id/my_recycler_view"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="8dp"
    android:scrollbars="vertical"
    tools:context=".MainFragment"
    tools:showIn="@layout/activity_main" />
Run Code Online (Sandbox Code Playgroud)

RecyclerView中的每个项目都包含一个CardView作为根视图:

card_item.xml:

<android.support.v7.widget.CardView  
    android:id="@+id/card_view"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <com.google.android.gms.maps.MapView 
            android:id="@+id/map"
            android:layout_width="match_parent"
            android:layout_height="180dp"
            map:liteMode="true" />

        <TextView
            android:id="@+id/title"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@id/map"
            android:transitionName="@string/transition_title" />

        <TextView
            android:id="@+id/subtitle"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@id/job_title"
            android:transitionName="@string/transition_rate" />

        <TextView
            android:id="@+id/description"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@id/job_rate"
            android:transitionName="@string/transition_description" />

    </RelativeLayout>

</android.support.v7.widget.CardView>
Run Code Online (Sandbox Code Playgroud)

在RecyclerView的ViewHolder中,我设置了onClickListener:

mCardView.setOnClickListener(new View.OnClickListener() {
    @Override …
Run Code Online (Sandbox Code Playgroud)

animation android shared-element-transition

5
推荐指数
1
解决办法
1704
查看次数

onEnterAnimationComplete()不称为API 21

我在活动之间和使用API​​ 21的设备上使用共享元素转换,不调用onEnterAnimationComplete()方法.这里说的是它是在api 21中引入的.请注意,该方法适用于Android版本6和7.该问题仅适用于在Android 5上运行的设备.任何想法?

android shared-element-transition

5
推荐指数
0
解决办法
776
查看次数

共享元素的输入过渡不起作用,但返回过渡可以正常工作(片段过渡)

我将从显示事件情况的gif图像开始。

发生的事情的GIF

该列表项应该设置为动画头文件。如您所见,当按下“后退”按钮时,标题项目会向下动画,成为列表项目。还有一个问题,这些片段的“活动”父对象也会在渐变过渡之后闪烁,因此,如果您对此有任何想法,我想知道:)

现在,在粘贴代码片段之前对我的代码进行一些解释。这个应用程式可浏览HTML文件的树状结构。小RecyclerView列表项是文档的标题。单击文档时,它会将标题固定在顶部,WebView并显示HTML。只有一个片段,并且在创建新片段时,该片段会创建其自身的另一个实例。该结构有些奇怪,但是后退按钮和堆栈似乎可以正常工作。这段代码在C#中,因为我使用的是Xamarin.Android,但除单击处理外,大多数代码都非常相似。

我可以从我的XML文件开始。布局仍然是WIP,所以我知道它们很凌乱。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/linear_layout_main"
    android:background="#ffffff">
  <LinearLayout
    android:id="@+id/progressLayout"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:visibility="gone"
    android:gravity="center">
    <ProgressBar
        android:id="@+id/progressbar"
        style="?android:attr/progressBarStyleLarge"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
  </LinearLayout>
  <LinearLayout
      android:id="@+id/subroutines_layout"
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      android:gravity="center"
      android:orientation="vertical"
      android:background="#ffffff">
    <TextView
        android:id="@+id/routine_title"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center_vertical"
        android:padding="5dp"
        android:textSize="24sp"
        android:visibility="gone"/>
    <FrameLayout
       android:id="@+id/preview_frame"
       android:layout_width ="match_parent"
       android:layout_height="150dp"
       android:visibility="gone">
      <WebView
        android:id="@+id/routine_preview"
        android:layout_width="match_parent"
        android:layout_height="150dp"
        android:gravity="center_vertical"
        android:padding="5dp"
        android:transitionName="webview_preview_transition"
        android:scrollbars="none"
        android:visibility="gone"/>
      <TextView
        android:id="@+id/routine_preview_clickable"
        android:layout_width="match_parent"
        android:layout_height="150dp"
        android:gravity="center_vertical"
        android:visibility="gone"/>
    </FrameLayout>
    <TextView
        android:id="@+id/preview_separator"
        android:layout_width="match_parent"
        android:layout_height="1dp"
        android:gravity="center_vertical"
        android:layout_marginLeft="15dp"
        android:layout_marginRight="15dp"
        android:background="@color/material_grey_100"
        android:visibility="gone"/>
    <android.support.v7.widget.RecyclerView
        android:id="@+id/routines_rv"
        android:layout_width="match_parent"
        android:layout_height="match_parent" …
Run Code Online (Sandbox Code Playgroud)

android android-animation xamarin.android android-transitions shared-element-transition

5
推荐指数
0
解决办法
714
查看次数

共享元素转换中的IllegalArgumentException

实现了活动共享元素转换的活动.它工作正常,但在极少数运行> = LOLLIPOP的设备上接收崩溃.

报告:

Fatal Exception: java.lang.IllegalArgumentException
       at android.os.Parcel.readException(Parcel.java:1550)
       at android.os.Parcel.readException(Parcel.java:1499)
       at android.app.ActivityManagerProxy.isTopOfTask(ActivityManagerNative.java:4654)
       at android.app.Activity.isTopOfTask(Activity.java:5557)
       at android.app.Activity.startActivityForResult(Activity.java:3903)
       at android.support.v4.app.BaseFragmentActivityApi16.startActivityForResult(BaseFragmentActivityApi16.java:54)
       at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:65)
       at android.app.Activity.startActivity(Activity.java:4146)
       at com.mypackage.Activity1.method1(Activity1.java:414). 
Run Code Online (Sandbox Code Playgroud)

试过这个:

Intent intent = new Intent(Activity1.this, Activity2.class);
     ActivityOptionsCompat options = ActivityOptionsCompat.
                    makeSceneTransitionAnimation(Activity1.this,
                            logoImageView,
                            ViewCompat.getTransitionName(logoImageView));
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                startActivity(intent, options.toBundle());
            } else {
                startActivity(intent);
            }
            overridePendingTransition(R.anim.stay, R.anim.stay); 
Run Code Online (Sandbox Code Playgroud)

那么这个来自ActivityManagerProxy中的 sof IllegalArgumentException:

Intent intent = new Intent(Activity1.this, Activity2.class);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
    ActivityOptions options = ActivityOptions
            .makeSceneTransitionAnimation(Activity1.this,
                    logoImageView,
                    getString(R.string.splashLogoSharedTransition));
    startActivity(intent, options.toBundle());
} else …
Run Code Online (Sandbox Code Playgroud)

animation android android-activity shared-element-transition

5
推荐指数
1
解决办法
1183
查看次数