动画完成后如何从Secondactivity移动到Mainactivity?

How to move from Secondactivity to Mainactivity after animation is complete?

抱歉,我对堆栈溢出有点陌生,但希望这个问题是可以理解的!

我和一位工作人员 memeber/community 交谈,他向我展示了从 1 activity(在我的例子中是存储动画的 GlobeActivity)到另一个 activity(MainActivity,其中username/password 已存储)。但是动画并没有出现,而是直接切到了MainActivity。

任何人都对为什么以及如何制作它有一些建议,以便 动画完成时,它重新定向/转换到 MainActivity 而没有[=26] =] 使用按钮?

到目前为止,这是我的代码:

GlobeActivity(我的 SecondActivity):

package com.example.testerino2022

import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.TextView

class GlobeActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_globe)

        supportActionBar?.hide()

        val textView = findViewById<TextView>(R.id.textGlobeScreen)
        textView.animate().translationX(1050F).setDuration(1000).setStartDelay(2500)

        val intent = Intent(this, MainActivity::class.java)
        startActivity(intent)
        finish()
    }

}

MainActivity(里面有默认代码);

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

    }
}
textView.animate()
   .translationX(1050F)
   .setDuration(1000)
   .setStartDelay(2500)
   .withEndAction {
       startActivity(Intent(context, MainActivity::class.java))
       finish()
  }

您是否已将应用程序清单中的启动器 activity 从 MainActivity 更改为 GlobeActivity?

您可以使用动画侦听器

 textView.animate().translationX(1050F).setDuration(1000).setStartDelay(2500).setListener(
        object: Animator.AnimatorListener{
            override fun onAnimationStart(p0: Animator?) {
                TODO("Not yet implemented")
            }

            override fun onAnimationEnd(p0: Animator?) {
                val intent = Intent(this, MainActivity::class.java)
                startActivity(intent)
                finish()
            }

            override fun onAnimationCancel(p0: Animator?) {
                TODO("Not yet implemented")
            }

            override fun onAnimationRepeat(p0: Animator?) {
                TODO("Not yet implemented")
            }

        }
    )

您可以使用您已经在使用的 ViewPropertyAnimator 内容轻松完成此操作 - 只需添加 withEndAction:

textView.animate()
    .translationX(1050F)
    .setDuration(1000)
    .setStartDelay(2500)
    .withEndAction {
        startActivity(Intent(context, MainActivity::class.java))
        finish()
    }

假设是 ImageView,您应该听取正在设置动画的视图或元素。您可以使用 ViewPropertyAnimator 执行此操作。

ImageView imageview = findViewById(R.id.imageView);

imageView.animate()
    .translationX(1050F)
    .setDuration(2000)
    .setStartDelay(1000)
    .withEndAction {
        startActivity(Intent(context, MainActivity::class.java))
        finish()
    }

说明

  1. translationX(float value) - 此方法将导致视图的 translationX 属性 动画到指定值

  2. setDuration(long duration) - 设置为请求的属性设置动画的底层动画师的持续时间。

  3. setStartDelay(long startDelay) - 为为请求的属性设置动画的底层动画师设置 startDelay。

  4. withEndAction(Runnable runnable) - 指定下一个动画结束时要发生的动作。

有关这方面的更多信息,请查看:-> ViewPropertyAnimator