不能 Unhide/Hide 进度条 Android
Cannot Unhide/Hide ProgressBar Android
我有一个 activity,它由一个 ImageView、一个 Button 和一个 ProgressBar 组成。
activity 的 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"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/submitActivityConstraintLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".SubmitActivity">
<ImageView
android:id="@+id/previewImageView"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_marginBottom="8dp"
app:layout_constraintBottom_toTopOf="@+id/submitButton"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<Button
android:id="@+id/submitButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="8dp"
android:text="Submit"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" />
<ProgressBar
android:id="@+id/progressBar"
style="?android:attr/progressBarStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="gone"
android:elevation="2dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
并且按钮有如下按钮点击监听函数:
val progressBar=findViewById<ProgressBar>(R.id.progressBar)
val submitActivityConstraintLayout=findViewById<ConstraintLayout>(R.id.submitActivityConstraintLayout)
progressBar.visibility=View.VISIBLE
submitActivityConstraintLayout.background = ColorDrawable(ContextCompat.getColor(this, R.color.shadow))
runBlocking{delay(5000L)}
progressBar.visibility=View.GONE
submitActivityConstraintLayout.background = ColorDrawable(ContextCompat.getColor(this, R.color.white))
我想要实现的是在 ImageView 上显示 ProgressBar 并在单击按钮后立即更改 ConstraintLayout 的背景颜色,然后再次 return 返回到响应为 return来自异步任务。
但由于某些原因我无法同时实现它们。
问题是您占用了主线程,因此您的更改在更改回来之前没有机会呈现。您可以将延迟移出 UI 线程,并允许更改在 UI 线程上呈现和显示。当延迟线程完成时,它将根据需要在主线程上进行 UI 更改。
像这样的东西应该可以工作:
Log.d("Applog", "Before")
launch {
delay(5000L)
launch(Dispatchers.Main) {
Log.d("Applog", "After")
progressBar.visibility = View.GONE
submitActivityConstraintLayout.background =
ColorDrawable(ContextCompat.getColor(this@MainActivity, R.color.white))
}
}
Log.d("Applog", "Continuing...")
您应该会在“继续...”之后看到“之前”,然后会延迟五秒钟,在此期间您会看到所做的更改。延迟后,您将看到您的第二组更改和“之后。”
我有一个 activity,它由一个 ImageView、一个 Button 和一个 ProgressBar 组成。
activity 的 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"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/submitActivityConstraintLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".SubmitActivity">
<ImageView
android:id="@+id/previewImageView"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_marginBottom="8dp"
app:layout_constraintBottom_toTopOf="@+id/submitButton"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<Button
android:id="@+id/submitButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="8dp"
android:text="Submit"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" />
<ProgressBar
android:id="@+id/progressBar"
style="?android:attr/progressBarStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="gone"
android:elevation="2dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
并且按钮有如下按钮点击监听函数:
val progressBar=findViewById<ProgressBar>(R.id.progressBar)
val submitActivityConstraintLayout=findViewById<ConstraintLayout>(R.id.submitActivityConstraintLayout)
progressBar.visibility=View.VISIBLE
submitActivityConstraintLayout.background = ColorDrawable(ContextCompat.getColor(this, R.color.shadow))
runBlocking{delay(5000L)}
progressBar.visibility=View.GONE
submitActivityConstraintLayout.background = ColorDrawable(ContextCompat.getColor(this, R.color.white))
我想要实现的是在 ImageView 上显示 ProgressBar 并在单击按钮后立即更改 ConstraintLayout 的背景颜色,然后再次 return 返回到响应为 return来自异步任务。
但由于某些原因我无法同时实现它们。
问题是您占用了主线程,因此您的更改在更改回来之前没有机会呈现。您可以将延迟移出 UI 线程,并允许更改在 UI 线程上呈现和显示。当延迟线程完成时,它将根据需要在主线程上进行 UI 更改。
像这样的东西应该可以工作:
Log.d("Applog", "Before")
launch {
delay(5000L)
launch(Dispatchers.Main) {
Log.d("Applog", "After")
progressBar.visibility = View.GONE
submitActivityConstraintLayout.background =
ColorDrawable(ContextCompat.getColor(this@MainActivity, R.color.white))
}
}
Log.d("Applog", "Continuing...")
您应该会在“继续...”之后看到“之前”,然后会延迟五秒钟,在此期间您会看到所做的更改。延迟后,您将看到您的第二组更改和“之后。”