过渡动画加载带有延迟的活动



我读了很多关于这个话题的帖子,但似乎没有最终的解决方案。我有一个使用导航组件加载片段的活动。我想执行幻灯片从右动画时,活动或片段开始。主要的问题是,活动开始时有几秒钟的延迟,也没有繁重的任务正在执行,这可能会导致这种延迟。

@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"/>

我使用hold动画的原因是为了避免在动画出现之前弹出黑屏,并且删除它仍然显示滞后。请检查是什么错误,我唯一的解决方案是删除过渡动画。

你的代码第一眼看是OK的。

第一选择:com.rnsoft.SubjectPropertyPurchaseFragment也许在这里我们有一些性能问题。

第二选择:你在SecondActivity开始前开始Toast了吗当我在startActivity调用之前使用Toast时,我遇到了fps问题。

第三种选择:也许你有一些SurfaceView/TextureView在你的视图树在上一个屏幕。当你的SurfaceView没有正确清理时,有时会产生延迟