Android的進度條與拖動條

一.進度條
進度條,ProgressBar,分爲環形和水平條行,首先看下效果圖,Progress進度加載。

進度條XML中的屬性
        style 設置ProgressBar樣式風格,可以自定義,系統也自帶有樣式。

                默認爲環形樣式

               @android:style/Widget.ProgressBar.Horizontal 水平進度條(粗)

               @android:style/Widget.ProgressBar.Inverse 普通大小環形進度條

               @android:style/Widget.ProgressBar.Large 大環形進度條

               @android:style/Widget.ProgressBar.Large.Inverse 大環形進度條

               @android:style/Widget.ProgressBar.Small 小環形進度條

              @android:style/Widget.ProgressBar.Small.Inverse 小環形進度條

      max 設置進度條最大值

      progress 設置進度條已完成的進度值

對應java代碼 則是加上get 與 set

上圖對應的java代碼如下

public class MainActivity extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		// 找到控件
		final ProgressBar bigProgressBar = (ProgressBar) findViewById(R.id.bigprogressBar);
		final ProgressBar smallProgressBar = (ProgressBar) findViewById(R.id.smallprogressBar);
		final TextView tv_progress1 = (TextView) findViewById(R.id.tv_progress1);
		final TextView tv_progress2 = (TextView) findViewById(R.id.tv_progress2);

		// 匿名內部類實現按鈕點擊事件,開始加載
		findViewById(R.id.btn_load).setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				start(bigProgressBar, tv_progress1);
				start(smallProgressBar, tv_progress2);
			}
		});
	}

	// 進度條開始變化的方法
	public void start(final ProgressBar progressBar, final TextView textView) {
		// 耗時任務放在子線程種進行
		new Thread() {
			private int nowProgress;
			private int maxProgress;

			public void run() {
				// 得到進度條當前的值
				nowProgress = progressBar.getProgress();
				// 得到進度條最大值
				maxProgress = progressBar.getMax();
				// 噹噹前進度小於最大進度值時
				while (nowProgress < maxProgress) {
					nowProgress++;
					progressBar.setProgress(nowProgress);
					// 表示在UI線程種更新TextView因爲子線程不能更新UI
					runOnUiThread(new Runnable() {

						@Override
						public void run() {
							// 設置TextView的內容
							textView.setText(nowProgress + "/" + maxProgress);
						}
					});
					try {
						// 延時模擬加載進度
						Thread.sleep(50);
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
				}
			};
		}.start();
	}
}

二.拖動條

拖動條 SeekBar 外觀和水平進度條相似,不過拖動條顧名思義爲可拖動的水平進度條

首先看效果圖 SeekBar改變手機音量

SeekBar與ProgressBar類似 依然有 max 與 progress屬性,對應java代碼爲set  get

SeekBar有監聽事件 即 setOnSeekBarChangeListener()

上圖效果java代碼如下

	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		// 找到SeekBar
		SeekBar seekBar = (SeekBar) findViewById(R.id.seekbar);
		// 獲取音量管理器
		audioManager = (AudioManager) getSystemService(AUDIO_SERVICE);
		// 獲取當前音樂音量的值 STREAM_MUSIC
		int index = audioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
		// 獲取音樂音量的最大值
		int max = audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
		// 設置拖動條當前值
		seekBar.setProgress(index);
		// 設置拖動條的最大值
		seekBar.setMax(max);

		seekBar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {

			@Override
			public void onStopTrackingTouch(SeekBar seekBar) {
				// 拖動停止時調用
			}

			@Override
			public void onStartTrackingTouch(SeekBar seekBar) {
				// 拖動開始時調用

			}

			@Override
			public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
				// 拖動改變時調用
				// 獲取seeKbar的當前值
				int seekBarvalue = seekBar.getProgress();
				// 設置音量大小,並在UI上顯示 AudioManager.FLAG_SHOW_UI
				audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, seekBarvalue, AudioManager.FLAG_SHOW_UI);
			}
		});
	}
}



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章