我有一个名为showProgress
的方法,它运行淡入淡出动画并使用只显示加载微调器(ProgressBar)的页面切换当前视图。
fun showProgress(show: Boolean, progressView: ProgressBar, layoutView: View): Completable {
val showView = if (show) progressView else layoutView
val hideView = if (show) layoutView else progressView
return fadeAnimation(showView, hideView)
}
private fun fadeAnimation(showView: View, hideView: View): Completable {
return Completable.create {
// animateSemaphore.acquire()
Log.d("beforeFade", "showView: ${showView.visibility}; hideView: ${hideView.visibility}")
val animTime: Long = showView.context.applicationContext.resources.getInteger(android.R.integer.config_shortAnimTime).toLong()
showView.alpha = 0f
handler.post {
showView.visibility = View.VISIBLE
showView.animate()
.alpha(1f)
.setDuration(animTime)
.setListener(null)
hideView.animate()
.alpha(0f)
.setDuration(animTime)
.setListener(object : AnimatorListenerAdapter() {
override fun onAnimationEnd(animation: Animator) {
hideView.visibility = View.GONE
Log.d("fade", "showView: ${showView.visibility}; hideView: ${hideView.visibility}")
it.onComplete()
}
})
}
}
}
我在等待网络请求完成RxJava时使用它,我想在应用程序等待请求完成时显示ProgressBar。但是,有时网络请求将在showProgress
完成之前返回,并导致动画运行两次,导致progressView和layoutView都设置为View.GONE
。
我的问题是如何确保在另一个showProgress
仍在运行时调用showProgress
时,被调用的showProgress
将等待一个运行结束?仅仅是一个参考,由于showProgress
在主线程上运行,信号量无法正常工作,并且会导致正在运行的showProgress
冻结。