【发布时间】:2021-10-25 21:08:43
【问题描述】:
我已经阅读了很多关于这个主题的主题,但似乎没有最终的解决方案。我有一个使用导航组件加载片段的活动。我想在活动或片段开始时从右侧动画执行幻灯片。主要问题是活动开始时有几秒钟的延迟,而且没有执行可能导致这种延迟的繁重任务。
@AndroidEntryPoint
class SecondActivity : AppCompatActivity() {
lateinit var binding : SecondActivityBinding
private val viewModel : PropertyViewModel by viewModels()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = SecondActivityBinding.inflate(layoutInflater)
setContentView(binding.root)
overridePendingTransition(R.anim.slide_in_right, R.anim.hold)
val navController = findNavController(R.id.nav_host_property)
navController.navigate(R.id.nav_sub_property_purchase)
}
}
SecondActivity.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
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">
<fragment
android:id="@+id/nav_host_property"
android:name="androidx.navigation.fragment.NavHostFragment"
android:layout_width="match_parent"
android:layout_height="0dp"
app:defaultNavHost="true"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:navGraph="@navigation/property_navigation" />
</androidx.constraintlayout.widget.ConstraintLayout>
property_navigation
<?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/property_navigation"
app:startDestination="@+id/nav_sub_property_purchase">
<fragment
android:id="@+id/nav_sub_property_purchase"
android:name="com.rnsoft.SubjectPropertyPurchaseFragment"
android:label="@string/subject_property"
tools:layout="@layout/property_purchase">
</fragment>
动画布局 slide_in_right.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:shareInterpolator="false">
<translate
android:duration="1000"
android:fromXDelta="300%"
android:fromYDelta="0%"
android:toXDelta="0%"
android:toYDelta="0%" />
</set>
hold.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate android:fromYDelta="0%p" android:toYDelta="0%p" android:duration="100"/>
我使用保持动画的原因是为了避免在动画出现之前弹出黑屏并且删除它仍然显示滞后。请检查是什么错误,我唯一的解决方案是删除过渡动画。
【问题讨论】:
-
如果第二个活动有很多信息要立即显示,这可能会导致延迟,因为它会在主线程上布置所有数据,例如在 RecyclerView 中。我使用的一种技巧是将数据应用到适配器延迟 300 毫秒,这样过渡动画就可以在数据开始布局显示之前完成。
-
我没有任何recyclerview。
-
这只是一个例子。任何使用大量主线程的东西都可能导致动画延迟。
标签: android kotlin android-animation