您只使用ProgressBar來表示某個事物的進度,它不包含任何邏輯,也不做任何類型的過程,它只會被外部過程更新(如果您想要)(如AsyncTask,for例)。這就是爲什麼它沒有任何偵聽器,並且它不可取消,因爲ProgressBar只在那裏,所以另一個進程可以選擇更新它,或者在完成時將其可見性設置爲GONE。因此,基本上,您不應該擔心進度條本身,您應該擔心進度條代表的進程以及此進程可以如何以及何時取消,因此您可以調用progressBar.setVisibility(View。當這發生時)。
就像一個例子,我使用ProgressBar來表示加載ImageView與畢加索。畢加索提供了一個回調,讓您知道何時裝載成功或失敗。在這兩種情況下,我都將ProgressBar的可見性設置爲GONE,並根據案例採取其他操作。這就是爲什麼我說你必須知道如何以及何時應該控制ProgressBar的可見性。
Picasso.with(this)
.load("https://image.tmdb.org/t/p/w640" + m.getPosterPath())
.into(posterImageView, new com.squareup.picasso.Callback() {
@Override
public void onSuccess() {
progressBar.setVisibility(View.GONE);
}
@Override
public void onError() {
progressBar.setVisibility(View.GONE);
noImageFoundTextView.setVisibility(View.VISIBLE);
}
});
確定,因此,如果您擔心的是UX和你想一個進度dismissable用戶,就可以實現這種解決辦法的:
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:layout_gravity="center"
android:layout_marginTop="5dp">
<ProgressBar
android:id="@+id/progressBar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"/>
<ImageView
android:id="@+id/dismissButton"
android:layout_width="20dp"
android:layout_height="20dp"
android:gravity="center"
android:background="@android:drawable/ic_menu_close_clear_cancel"
android:layout_gravity="center"/>
</FrameLayout>
的ImageView的將處理關閉進度條。
dismissButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
progressBar.setVisibility(View.GONE);
dismissButton.setVisibility(View.GONE);
//Take other actions on dismiss
}
});
![enter image description here](https://i.stack.imgur.com/FSgJg.png)
然後,如果有什麼加載圖像告訴在一個非典型的情況下相當長的時間了(慢ñ/W)和你的用戶,感覺有點討厭這個等待,試圖在進度條外面「解僱」它?理想情況下,開心的情況是,解僱酒吧並可選擇顯示消息。通過ProgressDialog,我可以通過dismiss listener很好地處理取消操作。你發佈的內容(視圖可見度)是我已經擁有的,但我想要關注UX的細微差別。 –
檢查我的最新編輯,我不知道這是否適合你要找的。 – FerDensetsu
+1好吧,我最終沒有這樣做,但這是相當不錯的,你所建議的。在其他佈局中可能會出現這種情況。謝謝。 –