Android入門筆記之Bar

<1>簡介

      熟悉ProgressBar、SeekBar、RatingBar這三種常用的Bar。

<2>關鍵步驟

       利用showDialog函數來創建ProgressBar,showDialog方法已過時。

android使用ShowDialog來顯示一個Dialog,當第一次調用ShowDialog時,會調用Activity的onCreateDialog方法,我們只需重寫該方法,在該方法中創建一個Dialog.而onPrepareDialog(int, Dialog)在Dialog顯示時每次都會被調用。因此如果要動態修改dialog的信息,可以在該方法中實現.

       通過SeekBar的setOnSeekBarChangeListener監聽器和RatingBar的setOnRatingBarChangeListener監聽器來監聽變化,同時改變對應的TextView的數值。

       SeekBar:

從SeekBar.OnSeekBarChangeListener可以看出,OnSeekBarChangeListener是SeekBar的內部接口。
實現這個監聽器,就必須實現三個方法:

onProgressChanged(SeekBar seekBar, int progress, boolean fromUser):當你拖動這個滑塊時就會調用這個方法。只要滑塊發生變化,無論是怎麼樣發生變化,都會調用這個方法。boolean fromUser  這個參數是來判斷是否是手動滑動。int progress  這個參數表示變動到什麼位置。

onStartTrackingTouch(SeekBar seekBar):當你開始拖動這個滑塊時就會調用這個方法。

onStopTrackingTouch(SeekBar seekBar):當你結束拖動這個滑塊時就會調用這個方法。

 

RatingBar:

屬性 

屬性名稱

描述

android:isIndicator

RatingBar是否是一個指示器(用戶無法進行更改)

android:numStars

顯示的星型數量,必須是一個整形值,像“100”。

android:rating

默認的評分,必須是浮點類型,像“1.2”。

android:stepSize

評分的步長,必須是浮點類型,像“1.2”。

 

方法:

public   int      getNumStars()

返回顯示星星總共的的數目。

 

public    float      getRating()

獲取當前等級(滿星星的數目)。

 

public   float      getStepSize()

得到RatingBar的步長。

 

public     boolean      isIndicator()

返回這RatingBar是否只是一個指示器(只是起指示作用,用戶無法進行交互)。

  

public   synchronized        void      setMax(int max)

設置這個進度條的範圍爲0……max

 

public    void      setNumStars(int numStars)

設置星星的數目。

 

public     void      setRating(float rating)

設置等級(星星的填充數目)。

 

public        void      setStepSize(float stepSize)

設置RatingBar的步長。


<3>出現的問題

       無

<4>代碼及解釋

ProgressBar效果圖:


SeekBar和RatingBar效果圖:



activity_bar.xml:

<?xml version="1.0" encoding="UTF-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <Button
        android:id="@+id/buttonbar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Button" />

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="大小:" />

    <SeekBar
        android:id="@+id/seekBar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <TextView
        android:id="@+id/textView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="評分:" />

    <RatingBar
        android:id="@+id/ratingBar"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
    
</LinearLayout>

BarActivity.java:

package com.ui.bar;

import android.app.Activity;
import android.app.Dialog;
import android.app.ProgressDialog;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.RatingBar;
import android.widget.SeekBar;
import android.widget.TextView;

import com.test.R;

public class BarActivity extends Activity{

	/**   
	 * @ProjectName:  [androidtest] 
	 * @Package:      [com.ui.bar.BarActivity.java]  
	 * @ClassName:    [BarActivity]   
	 * @Description:    
	 * @Author:       [gmj]   
	 * @CreateDate:   [2013-8-28 上午11:44:55]   
	 * @Version:      [v1.0] 
	 */
	final int PROGRESS_DIALOG = 0;
	final int INCREASE = 0;
	ProgressDialog pd;
	Handler hd;
	SeekBar seekbar;
	RatingBar ratingbar;
	TextView tv1,tv2;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_bar);
		Button bok = (Button)this.findViewById(R.id.buttonbar);
		tv1 = (TextView)this.findViewById(R.id.textView1);
		tv2 = (TextView)this.findViewById(R.id.textView2);
		seekbar = (SeekBar)this.findViewById(R.id.seekBar);
		ratingbar = (RatingBar)this.findViewById(R.id.ratingBar);
		
		seekbar.setOnSeekBarChangeListener(
			new SeekBar.OnSeekBarChangeListener(
				) {
			@Override
			public void onStopTrackingTouch(SeekBar seekBar) {
				// TODO Auto-generated method stub
			}
			@Override
			public void onStartTrackingTouch(SeekBar seekBar) {
				// TODO Auto-generated method stub
			}
			@Override
			public void onProgressChanged(SeekBar seekBar, int progress,
					boolean fromUser) {
				// TODO Auto-generated method stub
				tv1.setText("大小:" +(int)seekBar.getProgress());
			}
		});
		
		ratingbar.setOnRatingBarChangeListener(
				new RatingBar.OnRatingBarChangeListener() {
			@Override
			public void onRatingChanged(RatingBar ratingBar, float rating,
					boolean fromUser) {
				// TODO Auto-generated method stub
				tv2.setText("打分:" + (float)ratingbar.getRating());
			}
		});
		
		bok.setOnClickListener(new OnClickListener()
		{
			public void onClick(View v)
			{
				showDialog(PROGRESS_DIALOG);
			}
		});
		
		hd = new Handler(){
			public void handleMessage(Message msg)
			{
				super.handleMessage(msg);
				switch(msg.what)
				{
					case INCREASE:
						pd.incrementProgressBy(1);
						if(pd.getProgress() >= 100)
						{
							pd.dismiss();
						}
						break;
				}
			}
		};		
	}
	
	public Dialog onCreateDialog(int id)
	{
		switch(id)
		{
			case PROGRESS_DIALOG:
				pd = new ProgressDialog(this);
				pd.setMax(100);
				pd.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
				pd.setTitle("ProgressBar");
				pd.setCancelable(false);
			break;
		}
		return pd;
	}
	
	public void onPrepareDialog(int id , Dialog dialog){
		super.onPrepareDialog(id, dialog);
		switch(id){
		case PROGRESS_DIALOG:
			pd.incrementProgressBy(-pd.getProgress());
			new Thread(){
				public void run()
				{
					while(true)
					{
						hd.sendEmptyMessage(INCREASE);
						if(pd.getProgress() >= 100)
						{
							break;
						}
						try {
							Thread.sleep(40);
						} catch (InterruptedException e) {
							// TODO Auto-generated catch block
							e.printStackTrace();
						}
					}
				}
			}.start();
			break;
		}
	}	
}



發佈了29 篇原創文章 · 獲贊 4 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章