【发布时间】:2014-10-25 22:16:42
【问题描述】:
我想使用 Android Lollipop 的新 Activity Transitions。但目前我在动画中看到了非常奇怪的打嗝。我拼凑了我能想到的最小样本。
这是我在一个非常短的版本中所做的:
- 在我的
styles.xml中启用了窗口内容转换 - 引用了一个非常简单的
slide.xml作为我风格的退出过渡 - 为两种布局中的共享元素提供了
android:transitionName - 叫
ActivityOptions.makeSceneTransitionAnimation()用那个名字和我想分享的观点 - 将生成的包传递给
startActivity()
这是我看到的行为(尝试将动画速度降低 10 倍以了解我的意思): 就在幻灯片动画滑下未共享的视图之前,这些视图会向下跳跃一点。他们实际上分开了一点。
但是:这只发生在我运行该动画的秒次(以及之后的每次)。第一遍看起来还不错。而且只有当我想与下一个活动共享一个元素时才会发生这种情况。如果我不尝试共享元素,一切都会正常工作。
这是我的代码:
values/styles.xml
<resources>
<style name="AppTheme" parent="android:Theme.Material.Light">
<!-- enable window content transitions -->
<item name="android:windowContentTransitions">true</item>
<!-- specify exit transition -->
<item name="android:windowExitTransition">@transition/slide</item>
</style>
</resources>
transition/slide.xml
<slide />
主要活动的布局
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<View
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:background="#0000ff" />
<View
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:background="#00ff00" />
<View
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:background="#0000ff" />
<View
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:background="#00ff00" />
</LinearLayout>
<!-- the actual element I want to share -->
<View
android:id="@+id/view"
android:layout_width="56dp"
android:layout_height="56dp"
android:background="#ff0000"
android:elevation="8dp"
android:transitionName="view" />
</RelativeLayout>
MainActivity.java
public class MainActivity extends Activity implements View.OnClickListener {
View mView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mView = findViewById(R.id.view);
mView.setOnClickListener(this);
}
@Override
public void onClick(View view) {
ActivityOptions options = ActivityOptions.makeSceneTransitionAnimation(this, mView, "view");
Intent intent = new Intent(this, SecondaryActivity.class);
startActivity(intent, options.toBundle());
}
}
【问题讨论】:
-
您用于共享元素转换的代码在哪里?我看到您在自己的风格中指定了
windowExitTransition,但是您如何设置windowSharedElementExitTransition?另外,您的第二个活动布局代码是什么样的? -
另外,如果你给你的非共享视图固定高度(而不是为你的第一个活动的布局 XML 中的每个视图设置
layout_weight="1"),是否会发生同样的行为? -
我们不指定自定义
windowSharedElementExitTransition。因此,我们使用默认主题。共享元素在两种布局中都具有固定大小。
标签: android android-5.0-lollipop shared-element-transition activity-transition