Android

Android – ProgressBar Kullanımı

ProgressBar Nedir?

progress2ProgressBar, senkron ya da asenkron olarak yapılan bir işlemin durumunun gösterildiği bileşendir. Yandaki resimde gördüğünüz gibi bir görüntüsü vardır.

Bilmemiz Gereken Public Metodları

[blockquote ] Örneklerde, progressBar ismindeki değişkenin oluşturulduğunu varsaydım. Örnek Uygulama kısmında bu değişkenin nasıl oluşturduğunu görebilirsiniz. [/blockquote]

1- void setMax(int max)

Bu metod, ProgressBar‘ın maximum değerini belirlememizi sağlar. Maximum değer, varsayılan olarak 100’dür. Değiştirmek için bu metod kullanılır. Kullanımı şu şekildedir;

[syntax type=”html|php|js|css”]progressBar.setMax(60);[/syntax]

2- void setProgress(int progress)

Bu metod, ProgressBar‘ın anlık değerini belirlemek için kullanılır. Kullanımı şu şekildedir;

[syntax type=”html|php|js|css”]progressBar.setProgress(0);[/syntax]

3- void setIndeterminate(boolean indeterminate)
Ekran Resmi 2014-10-30 15.07.32Bu metod ise, ProgressBar’ın yanda gördüğünüz gibi sürekli tekrar eden bir animasyon şeklinde olup olmayacağını ayarlamak içindir. Kullanımı şu şekildedir;

[syntax type=”html|php|js|css”]progressBar.setIndeterminate(false);[/syntax]

Örnek Uygulama

Şimdi de örnek bir uygulama ile bu bileşenin kullanımını iyice anlayalım.

Öncelikle her zamanki gibi bir proje oluşturalım ve uygulamamıza başlayalım.

Uygulama İçeriği

Uygulamamızda, 1 dakikalık bir kronometre olacak. Bu kronometrenin kontrolünü sağlamak için başlatma, durdurma, sıfırlama gibi işlemleri gerçekleştirebilecek butonlar bulunacak. Evet, hemen uygulamayı hazırlamaya başlayalım.

Layout’un Hazırlanması

Ekran Resmi 2014-10-30 14.24.35

activity_main.xml dosyamızı açıyoruz ve tasarım kısmına (Graphical Layout)geçiyoruz. Burada Form Widgets sekmesi altından iki tane TextView, üç tane Button ve bir tane de ProgressBar‘ı sürükle bırak mantığıyla Linear Layout‘umuzun içerisine alıyoruz. Layouts sekmesi altından da bir tane Horizontal Linear Layout alıyoruz ve butonları bu layout‘un içine koyuyoruz.

Şimdi, XML kısmını aşağıdaki gibi düzenliyoruz.

 

 

 

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:layout_margin="10dp"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Kronometre"
        android:textSize="20sp"
        android:layout_gravity="center"
        android:layout_marginTop="40dp"
        android:textStyle="bold" />

    <ProgressBar
        android:id="@+id/progressBar1"
        style="?android:attr/progressBarStyleHorizontal"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="20dp"/>

    <TextView
        android:id="@+id/textView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="0 sn"
        android:textSize="20sp"
        android:layout_marginTop="10dp"
        android:layout_gravity="center" />

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:layout_marginTop="40dp" >

        <Button
            android:id="@+id/button1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Başlat" />
        <Button
            android:id="@+id/button2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Durdur" />
        <Button
            android:id="@+id/button3"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Sıfırla" />

    </LinearLayout>

</LinearLayout>

 

Tasarım kısmında yapacaklarımız bu kadar. Şimdi MainActivity’yi düzenlemeye geçelim.

Kodlama (MainActivity)

MainActivity sınıfını da aşağıdaki gibi güncelleyelim.

public class MainActivity extends Activity {

	private ProgressBar progressBar;
	private TextView textView;
	private Handler handler = new Handler();
	private Button baslat;
	private Button durdur;
	private Button sifirla;
	private int progressStatus = 0; 
	private boolean suspended = false;//Durdur butonuna basıldığında bu değeri true yapacağız.
	private boolean stopped = false;//Sıfırla butonuna basıldığında bu değeri true yapacağız.

	@Override
	// Bu metod uygulama açıldığında çalıştırılan metod.
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		// Bileşenleri eşleştiriyoruz.
		progressBar = (ProgressBar) findViewById(R.id.progressBar1);
		textView = (TextView) findViewById(R.id.textView2);
		baslat = (Button) findViewById(R.id.button1);
		durdur = (Button) findViewById(R.id.button2);
		sifirla = (Button) findViewById(R.id.button3);

		progressBar.setMax(60); //ProgressBar'ın Max değerini belirliyoruz.
		progressBar.setIndeterminate(false); //ProgressBar'ın tekrar eden bir animasyon ile çalışmasını önlüyoruz.

		initValues();

		baslat.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View arg0) {
				setKronometre().start();
				stopped=false;
				baslat.setEnabled(false);
				durdur.setEnabled(true);
				sifirla.setEnabled(true);
			}
		});
		durdur.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View arg0) {
				if (suspended) {
					suspended = false;
					durdur.setText("Durdur");
				} else {
					suspended = true;
					durdur.setText("Devam Et");
				}
			}
		});
		sifirla.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View arg0) {
				stopped=true;
				initValues();
			}
		});

	}
	
	private void initValues() { //Başlangıç değerlerini set ediyoruz.
		progressStatus=0;
		progressBar.setProgress(progressStatus);
		textView.setText("0sn / 60sn");
		baslat.setEnabled(true);
		durdur.setEnabled(false);
		sifirla.setEnabled(false);
		durdur.setText("Durdur");
		suspended=false;
	}
	
	private Thread setKronometre(){
		return new Thread(new Runnable() {
			public void run() {
					while (progressStatus < 60) {
						while (suspended) { //Eğer kronometre durdurulduysa bekle
							try {
								Thread.sleep(300);
							} catch (InterruptedException e) {
								e.printStackTrace();
							}
						}
						if(stopped) // Eğer kronometre sıfırlandıysa işlemi sonlandır
							break;
						progressStatus += 1;
						// yeni değeri ekranda göster ve progressBar'a set et.
						handler.post(new Runnable() {
							public void run() {
								progressBar.setProgress(progressStatus);
								textView.setText(progressStatus + "sn / "
										+ progressBar.getMax()+"sn");
							}
						});
						
						try {
							// Sleep for 1 second.
							// Just to display the progress slowly
							Thread.sleep(1000);
						} catch (InterruptedException e) {
							e.printStackTrace();
						}
					}
			}
		});
	}
}

 

Evet uygulamamız hazır. Kodlar arasına gerekli açıklamaları yazdım. Anlaşılmayan noktaları yorum olarak yazabilirsiniz. Cevaplamaktan memnuniyet duyarım.

Ekran Görüntüleri

Screenshot 2015-05-22 23.25.23Kaynak Kodlar

Uygulamanın kaynak kodları : https://github.com/mursidyazar/Android-ProgressBar.git

Benzer Yazılar

Android Görsel Bileşenler;

  1. TextView ve EditText
  2. ImageView
  3. Button ve StateListDrawable
  4. Toast
  5. ListView
  6. WebView
  7. Spinner
  8. CheckBox
  9. ProgressBar
  10. SeekBar

2 Yorum

  • buttonların setonclick fonksiyonlarında hatalar alıyorum. import etmem gerekne birşey mi var acaba daha yeniyim

    • Muhtemelen importlarda eksik vardır. Eğer ‘shift+ctrl+o’ tuşlarına basarsanız otomatik olarak gerekli importları yapacaktır. Ayrıca hatayı aldığınız metodun üzerine tıkladıktan sonra ‘Ctrl+1’ tuşarına basarsanız ya da aynı satırın solunda yanan hata işaretine(ampul üzerinde kırmızı bir çarpı) tıklarsanız size hatanın çözümleri için öneriler sunacaktır. Öneriler arasında muhtemelen ilk sırada bir sınıfı import etmeniz gerektiği yazıyordur. O öneriye çift tıkladığınızda da gerekli import işlemini yapmış olursunuz. Bunlar işe yaramaz ise, hata veren yerin ekran görüntüsünü gönderirseniz yardımcı olmaya çalışırım.

Yorum Yap