Android SeekBar

什麼是SeekBar控件,SeekBar控件其實就是一個高級點的進度條,就像咱們在聽歌,看電影用的播放器上的進度條同樣,是能夠拖動的,能夠改變進度的一個進度條控件!就是下面這個樣子java

seekbar對應的方法和屬性android

android:thumb---seekbar上繪製的thumb(可拖動的那個圖標)

public void setOnSeekBarChangeListener (SeekBar.OnSeekBarChangeListener l)

//設置一個監聽器以接受seekbar進度改變時的通知。同時提供用戶在SeekBar上開始和中止觸摸手勢時的通知。

//參數 l        SeekBar的通知監聽對象

//參見     SeekBar.OnSeekBarChangeListener

1.在res/layout目錄下定義一個佈局文件seekbar.xmlweb

<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
    <LinearLayout 
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
         android:orientation="vertical"
        >
			<TextView 
			    android:id="@+id/text"
			    android:layout_width="fill_parent" 
			    android:layout_height="wrap_content" 
			    android:text="我是SeekBar=進度爲:"
			    android:lines="2"
			    android:textColor="#11ddff"
			   />
			<SeekBar 
			     android:id="@+id/seekbar_btn_id"
				 android:layout_width="fill_parent"
				 android:layout_height="wrap_content"
			 />
			<ImageView 
			    android:id="@+id/seekbar_imageview_id"
			    android:layout_width="fill_parent" 
			    android:layout_height="wrap_content" 
			    android:src="@drawable/gallery_01"
			    android:lines="6"
			    android:textColor="#11ddff"
			    />
			<LinearLayout 
			        android:layout_width="fill_parent"
			        android:layout_height="fill_parent"
			         android:orientation="horizontal">
				    <TextView 
				       android:layout_width="wrap_content" 
					    android:layout_height="wrap_content"
					    android:text="拖到切換圖片"
				        />
				    <SeekBar 
				     android:id="@+id/seekbar_hand_id"
					 android:layout_width="fill_parent"
					 android:layout_height="wrap_content"
				     />
			 </LinearLayout>
			 <LinearLayout 
			        android:layout_width="fill_parent"
			        android:layout_height="fill_parent"
			         android:orientation="horizontal">
					   <TextView 
					    android:id="@+id/seekbar_liang_id"
					    android:layout_width="wrap_content" 
					    android:layout_height="wrap_content" 
					    android:text="改變屏幕亮度"
					    android:textColor="#11ddff"
					   />
						<SeekBar 
						     android:id="@+id/seekbar_hang_id1"
							 android:layout_width="fill_parent"
							 android:layout_height="wrap_content"
						 />
             </LinearLayout>
      </LinearLayout>
</ScrollView>

2.代碼文件SeekBarDemo.java以下:app

 

package com.test;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.text.method.ScrollingMovementMethod;
import android.view.View;
import android.view.WindowManager;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.SeekBar;
import android.widget.SeekBar.OnSeekBarChangeListener;
import android.widget.TextView;

public class SeekBarDemo extends Activity {
	
	private SeekBar  seekBar,seekBar2,seekBar3;
	private TextView textview,textview2;
	private  ImageView  imageView;
	//標記是否須要刷新
	private boolean flag=true;
	private Handler hangler=new Handler();
	////
	private  int []  arrayImage =new int[]{R.drawable.gallery_01,
			R.drawable.gallery_02,R.drawable.gallery_03,R.drawable.gallery_04,R.drawable.gallery_05,R.drawable.gallery_06};
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		setContentView(R.layout.seekbar);
		
		seekBar=(SeekBar)findViewById(R.id.seekbar_btn_id);
		seekBar2=(SeekBar)findViewById(R.id.seekbar_hand_id);//第二個
		seekBar2=(SeekBar)findViewById(R.id.seekbar_hand_id);//第二個
		seekBar3=(SeekBar)findViewById(R.id.seekbar_hang_id1);//第san個
		textview=(TextView)findViewById(R.id.text);
		//設置拖動條的最大值,其將爲該拖動條顯示的基數
		seekBar.setMax(100);
		//爲該方法seekbar註冊一個監聽,當seekbar發生改變時調用1中的對應方法
		seekBar.setOnSeekBarChangeListener(onSeekbar);
		imageView = (ImageView)findViewById(R.id.seekbar_imageview_id);
		refresh();
		///////
		 this.seekBar2.setMax(arrayImage.length);
		this.seekBar3.setMax(100);
		this.seekBar2.setOnSeekBarChangeListener(seekbar);
		this.seekBar3.setOnSeekBarChangeListener(seekbar);
	}
	//第二個seekBar
	private  OnSeekBarChangeListener  seekbar = new 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
			if(seekBar.getId()==R.id.seekbar_hand_id)
			{
				imageView.setImageResource(arrayImage[seekBar2.getProgress()]);
			}
			if(seekBar.getId()==R.id.seekbar_hang_id1)
			{
				setScreenBrightness((float) seekBar
						.getProgress() / 100);
			}
		
			
		}
	};
	//表示屏幕亮度的方法
	private void setScreenBrightness(float num) {	// 0 ~ 1表示亮度
		WindowManager.LayoutParams layoutParams = super.getWindow().getAttributes() ;	// 取得屏幕的屬性
		layoutParams.screenBrightness = num ;	// 設置屏幕亮度
		super.getWindow().setAttributes(layoutParams) ;	// 從新設置窗口的屬性
	}
	//第一個sekbar
	private  OnSeekBarChangeListener  onSeekbar=new OnSeekBarChangeListener() {
		
		@Override
		//當遊標移動中止的時候調用該方法
		public void onStopTrackingTouch(SeekBar seekBar) {
		//設置標記爲須要刷新
			flag=true;
	   //建立時就開始自動更新該拖動條
			refresh();
		}
		
		
		@Override
		//當遊標開始移動時調用該方法
		public void onStartTrackingTouch(SeekBar seekBar) {
		//中止刷新
			flag=false;
		}
		
		@Override
		//當進度條遊標被改變或者進度條改變時調用該方法
		public void onProgressChanged(SeekBar seekBar, int progress,
				boolean fromUser) {
			//更改textView的內容
			textview.setText("進度爲:"+progress+"%");
			
		}
		
	};
	//該方法自動更新該拖動條
	private void refresh() {
		new Thread(new Runnable() {
			
			@Override
			public void run() {
				// TODO Auto-generated method stub
				//當進度不到1000,就更新status
				while(flag && seekBar.getProgress()<100)
				{
					try {
						//暫停1秒
						Thread.sleep(1000);
					} catch (InterruptedException e) {
						// TODO: handle exception
						e.printStackTrace();
					}
					//將一個Runnable對象添加到消息隊列當中,
					//而且當執行到該對象時執行run()方法
					hangler.post(new Runnable() {
						
						@Override
						public void run() {
							// 從新設置進度條當前的值
							seekBar.setProgress(seekBar.getProgress()+1);
							
						}
					});
				}
			}
		}).start();
       }
}

 三:執行效果以下:ide

 

相關文章
相關標籤/搜索