什么是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