Я хочу запустить последовательность анимации на заставке, когда данные загрузки загружаются в приложение. До того, как я поместил анимацию в asyncTask
, она работала отлично, но анимация не должна запускаться до загрузки данных запуска. Поэтому я сделал asyncTask
вызов API для этого. Внутри onPreExecute()
я хочу запустить анимационную последовательность, а в doInBackground()
есть startupRequest()
.
Проблема с этим решением -> Если я запускаю заставку, анимация запускается (я проверял это), но она сразу же замерзает при переходе к методу doInBackground()
-> вторая анимация не вызывается.
Я даже пытался сделать анимацию вызова внутри runOnUiThread()
метода (что бесполезно, потому что onPreExecute () должен запускаться в потоке пользовательского интерфейса - это для ProgressBar
или тому подобного).
вызов AsyncTask и метод анимации:
fun splashScreen(splashActivity: Splash){
class GetSplashAsync: AsyncTask<Void, Void, Boolean>() {
override fun onPreExecute() {
createLog("SplashScreen: ", "Starting onPreExecute() --> anim on UIThread")
splashActivity.runOnUiThread {
splashActivity.splashAnimation()
}
}
override fun doInBackground(vararg params: Void?): Boolean {
return splashActivity.startupRequest()
}
}
GetSplashAsync().execute()
}
fun splashAnimation(){
val firstAnim = AnimationUtils.loadAnimation(this, R.anim.splash_first_anim)
val secondAnim = AnimationUtils.loadAnimation(this, R.anim.splash_second_anim)
firstAnimImg.visibility = View.INVISIBLE
secondAnimImg.visibility = View.INVISIBLE
createLog("SplashScreenAnim: ", "Starting anim 1")
firstAnimImg.startAnimation(firstAnim)
firstAnim.setAnimationListener(object: Animation.AnimationListener{
override fun onAnimationStart(p0: Animation?) {
firstAnimImg.visibility = View.VISIBLE
}
override fun onAnimationRepeat(p0: Animation?) {
}
override fun onAnimationEnd(p0: Animation?) {
createLog("SplashScreenAnim: ", "Starting anim 2")
secondAnimImg.startAnimation(secondAnim)
}
})
secondAnim.setAnimationListener(object: Animation.AnimationListener{
override fun onAnimationStart(p0: Animation?) {
secondAnimImg.visibility = View.VISIBLE
}
override fun onAnimationRepeat(p0: Animation?) {
}
override fun onAnimationEnd(p0: Animation?) {
}
})
}