什麼是SeekBar控件,SeekBar控件其實就是一個高級點的進度條,就像咱們在聽歌,看電影用的播放器上的進度條同樣,是能夠拖動的,能夠改變進度的一個進度條控件!就是下面這個樣子java
seekbar對應的方法和屬性android
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