Mengubah Style ProgressBar

1. Kita masih menggunakan project yang sama dengan sebelumnya, dan kita modifikasi file layout xml “activity_main.xml” seperti berikut:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="id.co.blogspot.diansano.viewdasar2.MainActivity">


<ProgressBar
android:id="@+id/progressbar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
style="@android:style/Widget.ProgressBar.Horizontal"/>
</LinearLayout>
2. Kita modifikasi file “MainActivity.java” dengan menambahkan kode berikut:
package id.co.blogspot.diansano.viewdasar2;

import android.os.Handler;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.ProgressBar;

public class MainActivity extends AppCompatActivity {

static int progress;
ProgressBar progressBar;
int progressStatus = 0;
Handler handler = new Handler();

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

progress = 0;
progressBar = (ProgressBar)findViewById(R.id.progressbar);
progressBar.setMax(200);

/*melakukan suatu operasi di thread background*/
new Thread(new Runnable() {
@Override
public void run() {
/*lakukan sesuatu disini*/
while (progressStatus < 100)
{
progressStatus = doSomeWork();

/*update progress bar*/
handler.post(new Runnable() {
@Override
public void run() {
progressBar.setProgress(progressStatus);
}
});
}

/*sembunyikan progress bar*/
handler.post(new Runnable() {
@Override
public void run() {
/*---0 - Visible; 4 - Invisible; 8 - Gone--*/
progressBar.setVisibility(View.GONE);
}
});
}
/*melakukan suatu operasi yang panjang disini*/
private int doSomeWork() {
try {
/*simulasi seolah2 melakukan sesuatu*/
Thread.sleep(500);
} catch (InterruptedException e)
{
e.printStackTrace();
}
return ++progress;
}
}).start();
}
}
3. Jalankan di emulator Android Studio

4. Gambar di atas menampilkan ProgressBar dan ketika progress mencapai 50% menghilang.

Penjelasan:

Untuk menampilkan ProgressBar secara horizontal, kita set atribut ‘style’ ke ‘@android:style/Widget.ProgressBar.Horizontal’ seperti berikut:
<ProgressBar
android:id="@+id/progressbar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
style="@android:style/Widget.ProgressBar.Horizontal"/>
Untuk menampilkan progress, kita memanggil method ‘setProgress()’, dengan melewatkan integer yang menunjukkan progressnya:
/*update progress bar*/
handler.post(new Runnable() {
@Override
public void run() {
progressBar.setProgress(progressStatus);
}
});
Dalam contoh latihan ini, kita men-set range ProgressBar mulai dari 0 hingga 200 (melalui method ‘setMax()’). Jadi ProgressBar akan berhenti dan kemudian hilang bila sudah mencapai setengah jalan (karena kita hanya akan melanjutkan untuk memanggil method ‘doSomeWork()’ sepanjang ‘progressStatus’ nya kurang dari 100). Untuk memastikan bahwa ProgressBar hanya akan hilang ketika mencapai 100%, kita bisa lakukan dengan men-set nilai maksimum ke 100 atau dengan memodifikasi loop ‘while’ untuk berhenti ketika ‘progressStatus mencapai 200.

Selain style ‘horizontal’ untuk ‘ProgressBar’ yang sudah kita gunakan di atas, kita juga bisa menggunakan konstanta berikut:
  • Widget.ProgressBar.Horizontal
  • Widget.ProgressBar.Small
  • Widget.ProgressBar.Large
  • Widget.ProgressBar.Inverse
  • Widget.ProgressBar.Small.Inverse
  • Widget.ProgressBar.Large.Inverse

No comments: