【问题标题】:Transition animation loads activity with lag过渡动画加载有延迟的活动
【发布时间】: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


【解决方案1】:

您的代码在第一次查看时没问题。

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

第二个选项: 你在SecondActivity开始之前开始吐司了吗? 我在调用 startActivity 之前使用 Toast 时遇到了 fps 问题。

第三个选项: 也许您在前一个屏幕的视图树中有一些 SurfaceView/TextureView。 当 SurfaceView 未正确清理时,有时会产生滞后

【讨论】:

    猜你喜欢
    • 2022-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-03
    • 2013-10-29
    • 1970-01-01
    • 2013-05-06
    • 2011-10-11
    相关资源
    最近更新 更多