如何在 Java 中使用 MaterialSharedAxis Transition
How to use the MaterialSharedAxis Transition in Java
如何获得提到的 MaterialSharedAxis 转换 here
在 Java 中。您可以看到文档在 Kotlin 中 我找不到这些转换的 Java 文档。我通过 Android Studio 查看了图书馆,我也能找到这样的 class。请帮助
MaterialSharedAxis
是在 Material 库的 1.2.0-alpha05
版本中引入的,因此您需要在 build.gradle
文件中使用此版本(或更高版本):
implementation 'com.google.android.material:material:1.2.0-alpha05'
请注意,由于此库处于 alpha 阶段,因此在稳定版本发布之前可能会有一些重大更改。
片段之间的过渡
为了实现Fragments之间的Transition,需要在两个Fragments的onCreate
方法中进行配置。
片段 A:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
MaterialSharedAxis backward = new MaterialSharedAxis(MaterialSharedAxis.Z, false);
setReenterTransition(backward);
MaterialSharedAxis forward = new MaterialSharedAxis(MaterialSharedAxis.Z, true);
setExitTransition(forward);
}
片段 B:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
MaterialSharedAxis forward = new MaterialSharedAxis(MaterialSharedAxis.Z, true);
setEnterTransition(forward);
MaterialSharedAxis backward = new MaterialSharedAxis(MaterialSharedAxis.Z, false);
setReturnTransition(backward);
}
要从片段 A 前进到片段 B:
getSupportFragmentManager()
.beginTransaction()
.replace(R.id.fragment_container, new FragmentB())
.commit();
您应该考虑学习 Kotlin,因为它现在是 Android 的官方语言,并且大多数库、文档片段和示例应用程序现在都是用它编写的。
活动之间的转换
要使用 MaterialSharedAxis
,您需要 1.2.0 版的 Material 库。
在您的 build.gradle
文件中:
implementation 'com.google.android.material:material:1.2.1'
在您的主题中启用 Activity 转换
<style name="MyTheme" parent="Theme.MaterialComponents.DayNight">
...
<item name="android:windowActivityTransitions">true</item>
</style>
Activity答:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Slide left
MaterialSharedAxis sharedAxisExit = new MaterialSharedAxis(MaterialSharedAxis.X,true);
// Slide right
MaterialSharedAxis sharedAxisEnter = new MaterialSharedAxis(MaterialSharedAxis.X,false);
// Exclude this views from the animation, or you get a flicker in animation.
sharedAxisEnter.excludeTarget(getWindow().getDecorView().findViewById(R.id.action_bar_container), true);
sharedAxisEnter.excludeTarget(android.R.id.statusBarBackground, true);
sharedAxisEnter.excludeTarget(android.R.id.navigationBarBackground, true);
sharedAxisExit.excludeTarget(getWindow().getDecorView().findViewById(R.id.action_bar_container), true);
sharedAxisExit.excludeTarget(android.R.id.statusBarBackground, true);
sharedAxisExit.excludeTarget(android.R.id.navigationBarBackground, true);
getWindow().setEnterTransition(sharedAxisEnter);
getWindow().setExitTransition(sharedAxisExit);
}
Activity乙:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
MaterialSharedAxis sharedAxisEnter = new MaterialSharedAxis(MaterialSharedAxis.X,true);
MaterialSharedAxis sharedAxisExit = new MaterialSharedAxis(MaterialSharedAxis.X,false);
sharedAxisEnter.excludeTarget(getWindow().getDecorView().findViewById(R.id.action_bar_container), true);
sharedAxisEnter.excludeTarget(android.R.id.statusBarBackground, true);
sharedAxisEnter.excludeTarget(android.R.id.navigationBarBackground, true);
sharedAxisExit.excludeTarget(getWindow().getDecorView().findViewById(R.id.action_bar_container), true);
sharedAxisExit.excludeTarget(android.R.id.statusBarBackground, true);
sharedAxisExit.excludeTarget(android.R.id.navigationBarBackground, true);
getWindow().setEnterTransition(sharedAxisEnter);
getWindow().setExitTransition(sharedAxisExit);
}
触发动画:
Intent intent = new Intent(ActivityA.this, ActivityB.class);
ActivityOptions activityOptions = ActivityOptions.makeSceneTransitionAnimation(ActivityA.this);
startActivity(intent, activityOptions.toBundle());
如何获得提到的 MaterialSharedAxis 转换 here 在 Java 中。您可以看到文档在 Kotlin 中 我找不到这些转换的 Java 文档。我通过 Android Studio 查看了图书馆,我也能找到这样的 class。请帮助
MaterialSharedAxis
是在 Material 库的 1.2.0-alpha05
版本中引入的,因此您需要在 build.gradle
文件中使用此版本(或更高版本):
implementation 'com.google.android.material:material:1.2.0-alpha05'
请注意,由于此库处于 alpha 阶段,因此在稳定版本发布之前可能会有一些重大更改。
片段之间的过渡
为了实现Fragments之间的Transition,需要在两个Fragments的onCreate
方法中进行配置。
片段 A:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
MaterialSharedAxis backward = new MaterialSharedAxis(MaterialSharedAxis.Z, false);
setReenterTransition(backward);
MaterialSharedAxis forward = new MaterialSharedAxis(MaterialSharedAxis.Z, true);
setExitTransition(forward);
}
片段 B:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
MaterialSharedAxis forward = new MaterialSharedAxis(MaterialSharedAxis.Z, true);
setEnterTransition(forward);
MaterialSharedAxis backward = new MaterialSharedAxis(MaterialSharedAxis.Z, false);
setReturnTransition(backward);
}
要从片段 A 前进到片段 B:
getSupportFragmentManager()
.beginTransaction()
.replace(R.id.fragment_container, new FragmentB())
.commit();
您应该考虑学习 Kotlin,因为它现在是 Android 的官方语言,并且大多数库、文档片段和示例应用程序现在都是用它编写的。
活动之间的转换
要使用 MaterialSharedAxis
,您需要 1.2.0 版的 Material 库。
在您的 build.gradle
文件中:
implementation 'com.google.android.material:material:1.2.1'
在您的主题中启用 Activity 转换
<style name="MyTheme" parent="Theme.MaterialComponents.DayNight">
...
<item name="android:windowActivityTransitions">true</item>
</style>
Activity答:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Slide left
MaterialSharedAxis sharedAxisExit = new MaterialSharedAxis(MaterialSharedAxis.X,true);
// Slide right
MaterialSharedAxis sharedAxisEnter = new MaterialSharedAxis(MaterialSharedAxis.X,false);
// Exclude this views from the animation, or you get a flicker in animation.
sharedAxisEnter.excludeTarget(getWindow().getDecorView().findViewById(R.id.action_bar_container), true);
sharedAxisEnter.excludeTarget(android.R.id.statusBarBackground, true);
sharedAxisEnter.excludeTarget(android.R.id.navigationBarBackground, true);
sharedAxisExit.excludeTarget(getWindow().getDecorView().findViewById(R.id.action_bar_container), true);
sharedAxisExit.excludeTarget(android.R.id.statusBarBackground, true);
sharedAxisExit.excludeTarget(android.R.id.navigationBarBackground, true);
getWindow().setEnterTransition(sharedAxisEnter);
getWindow().setExitTransition(sharedAxisExit);
}
Activity乙:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
MaterialSharedAxis sharedAxisEnter = new MaterialSharedAxis(MaterialSharedAxis.X,true);
MaterialSharedAxis sharedAxisExit = new MaterialSharedAxis(MaterialSharedAxis.X,false);
sharedAxisEnter.excludeTarget(getWindow().getDecorView().findViewById(R.id.action_bar_container), true);
sharedAxisEnter.excludeTarget(android.R.id.statusBarBackground, true);
sharedAxisEnter.excludeTarget(android.R.id.navigationBarBackground, true);
sharedAxisExit.excludeTarget(getWindow().getDecorView().findViewById(R.id.action_bar_container), true);
sharedAxisExit.excludeTarget(android.R.id.statusBarBackground, true);
sharedAxisExit.excludeTarget(android.R.id.navigationBarBackground, true);
getWindow().setEnterTransition(sharedAxisEnter);
getWindow().setExitTransition(sharedAxisExit);
}
触发动画:
Intent intent = new Intent(ActivityA.this, ActivityB.class);
ActivityOptions activityOptions = ActivityOptions.makeSceneTransitionAnimation(ActivityA.this);
startActivity(intent, activityOptions.toBundle());