使用 jetpack 导航组件过渡动画不起作用
Using jetpack Navigation component transition-animation is not working
我正在使用 jetpack 导航组件来导航片段,我在 res 目录中创建了一个动画并添加了这个 animation-transition
:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:shareInterpolator="false">
<translate
android:duration="600"
android:interpolator="@android:anim/decelerate_interpolator"
android:fromXDelta="100%"
android:toXDelta="0%" />
</set>
并将此动画设置为在导航组件处可视化打开片段的进入动画:
调用后:
findNavController().navigate(R.id.reg2Fragment)
我仍然没有得到我的手动动画,那里显示默认的淡入淡出。
我正在为我的整个项目主题使用 Material Io 设计。这是我的依赖项:
implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
implementation 'androidx.core:core-ktx:1.6.0'
implementation 'androidx.appcompat:appcompat:1.3.1'
implementation 'com.google.android.material:material:1.4.0'
implementation 'androidx.constraintlayout:constraintlayout:2.1.1'
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
implementation 'com.google.firebase:firebase-auth:21.0.1'
implementation 'androidx.navigation:navigation-fragment-ktx:2.3.5'
implementation 'androidx.navigation:navigation-ui-ktx:2.3.5'
testImplementation 'junit:junit:4.13.2'
androidTestImplementation 'androidx.test.ext:junit:1.1.3'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
implementation "androidx.activity:activity-ktx:1.3.1"
implementation "androidx.fragment:fragment-ktx:1.3.6"
implementation platform('com.google.firebase:firebase-bom:28.4.0')
implementation 'com.google.firebase:firebase-analytics-ktx'
// for Jet-Pack-Navigation-Component
implementation 'androidx.navigation:navigation-fragment-ktx'
implementation 'androidx.navigation:navigation-ui-ktx'
这是导航图:
<?xml version="1.0" encoding="utf-8"?>
<navigation 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:id="@+id/nav_graph"
app:startDestination="@id/reg1Fragment">
<fragment
android:id="@+id/reg1Fragment"
android:name="com.example.authapp.uiRegistration.Reg1Fragment"
tools:layout="@layout/fragment_reg1"
android:label="Reg1Fragment" >
<action
android:id="@+id/action_reg1Fragment2_to_reg2Fragment"
app:destination="@id/reg2Fragment"
app:enterAnim="@anim/nav_default_enter_anim"
app:exitAnim="@anim/nav_default_exit_anim"
app:popEnterAnim="@anim/slide_out_bottom"
app:popExitAnim="@anim/slide_out_right" />
</fragment>
<fragment
android:id="@+id/reg2Fragment"
android:name="com.example.authapp.uiRegistration.Reg2Fragment"
tools:layout="@layout/fragment_reg2"
android:label="Reg2Fragment" >
<action
android:id="@+id/action_reg2Fragment_to_reg3Fragment"
app:destination="@id/reg3Fragment"
app:enterAnim="@anim/nav_default_enter_anim" />
</fragment>
<fragment
android:id="@+id/reg3Fragment"
android:name="com.example.authapp.uiRegistration.Reg3Fragment"
android:label="fragment_reg3"
tools:layout="@layout/fragment_reg3" >
<action
android:id="@+id/action_reg3Fragment_to_userProfile"
app:destination="@id/userProfile"
app:popUpTo="@id/userProfile" />
</fragment>
<activity
android:id="@+id/userProfile"
android:name="com.example.authapp.UserProfile"
android:label="activity_user_profile"
tools:layout="@layout/activity_user_profile" />
</navigation>
请哪位高手帮我解决一下。
谢谢
findNavController().navigate(R.id.reg2Fragment)
此处 the version of the navigate(destinationId)
方法不涉及动画,因为 R.id.reg2Fragment
不提供除目标片段 ID 之外的任何信息。
但是为了在导航中包含动画,您需要使用接受 navDirection
参数的 navigate() method,这通常是生成方向 class 的方法这个特定的动作。
所以,因为 action
的 id 是 action_reg1Fragment2_to_reg2Fragment
:
<action
android:id="@+id/action_reg1Fragment2_to_reg2Fragment"
app:destination="@id/reg2Fragment"
app:enterAnim="@anim/nav_default_enter_anim"
app:exitAnim="@anim/nav_default_exit_anim"
app:popEnterAnim="@anim/slide_out_bottom"
app:popExitAnim="@anim/slide_out_right" />
那么,导航将是:
findNavController().navigate(Reg1FragmentDirections.actionReg1Fragment2ToReg2Fragment())
我正在使用 jetpack 导航组件来导航片段,我在 res 目录中创建了一个动画并添加了这个 animation-transition
:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:shareInterpolator="false">
<translate
android:duration="600"
android:interpolator="@android:anim/decelerate_interpolator"
android:fromXDelta="100%"
android:toXDelta="0%" />
</set>
并将此动画设置为在导航组件处可视化打开片段的进入动画:
调用后:
findNavController().navigate(R.id.reg2Fragment)
我仍然没有得到我的手动动画,那里显示默认的淡入淡出。
我正在为我的整个项目主题使用 Material Io 设计。这是我的依赖项:
implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
implementation 'androidx.core:core-ktx:1.6.0'
implementation 'androidx.appcompat:appcompat:1.3.1'
implementation 'com.google.android.material:material:1.4.0'
implementation 'androidx.constraintlayout:constraintlayout:2.1.1'
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
implementation 'com.google.firebase:firebase-auth:21.0.1'
implementation 'androidx.navigation:navigation-fragment-ktx:2.3.5'
implementation 'androidx.navigation:navigation-ui-ktx:2.3.5'
testImplementation 'junit:junit:4.13.2'
androidTestImplementation 'androidx.test.ext:junit:1.1.3'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
implementation "androidx.activity:activity-ktx:1.3.1"
implementation "androidx.fragment:fragment-ktx:1.3.6"
implementation platform('com.google.firebase:firebase-bom:28.4.0')
implementation 'com.google.firebase:firebase-analytics-ktx'
// for Jet-Pack-Navigation-Component
implementation 'androidx.navigation:navigation-fragment-ktx'
implementation 'androidx.navigation:navigation-ui-ktx'
这是导航图:
<?xml version="1.0" encoding="utf-8"?>
<navigation 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:id="@+id/nav_graph"
app:startDestination="@id/reg1Fragment">
<fragment
android:id="@+id/reg1Fragment"
android:name="com.example.authapp.uiRegistration.Reg1Fragment"
tools:layout="@layout/fragment_reg1"
android:label="Reg1Fragment" >
<action
android:id="@+id/action_reg1Fragment2_to_reg2Fragment"
app:destination="@id/reg2Fragment"
app:enterAnim="@anim/nav_default_enter_anim"
app:exitAnim="@anim/nav_default_exit_anim"
app:popEnterAnim="@anim/slide_out_bottom"
app:popExitAnim="@anim/slide_out_right" />
</fragment>
<fragment
android:id="@+id/reg2Fragment"
android:name="com.example.authapp.uiRegistration.Reg2Fragment"
tools:layout="@layout/fragment_reg2"
android:label="Reg2Fragment" >
<action
android:id="@+id/action_reg2Fragment_to_reg3Fragment"
app:destination="@id/reg3Fragment"
app:enterAnim="@anim/nav_default_enter_anim" />
</fragment>
<fragment
android:id="@+id/reg3Fragment"
android:name="com.example.authapp.uiRegistration.Reg3Fragment"
android:label="fragment_reg3"
tools:layout="@layout/fragment_reg3" >
<action
android:id="@+id/action_reg3Fragment_to_userProfile"
app:destination="@id/userProfile"
app:popUpTo="@id/userProfile" />
</fragment>
<activity
android:id="@+id/userProfile"
android:name="com.example.authapp.UserProfile"
android:label="activity_user_profile"
tools:layout="@layout/activity_user_profile" />
</navigation>
请哪位高手帮我解决一下。
谢谢
findNavController().navigate(R.id.reg2Fragment)
此处 the version of the navigate(destinationId)
方法不涉及动画,因为 R.id.reg2Fragment
不提供除目标片段 ID 之外的任何信息。
但是为了在导航中包含动画,您需要使用接受 navDirection
参数的 navigate() method,这通常是生成方向 class 的方法这个特定的动作。
所以,因为 action
的 id 是 action_reg1Fragment2_to_reg2Fragment
:
<action
android:id="@+id/action_reg1Fragment2_to_reg2Fragment"
app:destination="@id/reg2Fragment"
app:enterAnim="@anim/nav_default_enter_anim"
app:exitAnim="@anim/nav_default_exit_anim"
app:popEnterAnim="@anim/slide_out_bottom"
app:popExitAnim="@anim/slide_out_right" />
那么,导航将是:
findNavController().navigate(Reg1FragmentDirections.actionReg1Fragment2ToReg2Fragment())