什么是SeekBar控件,SeekBar控件其实就是一个高级点的进度条,就像我们在听歌,看电影用的播放器上的进度条一样,是可以拖动的,可以改变进度的一个进度条控件!就是下面这个样子
seekbar对应的方法和属性
android:thumb---seekbar上绘制的thumb(可拖动的那个图标)
public void setOnSeekBarChangeListener (SeekBar.OnSeekBarChangeListener l)
//设置一个监听器以接受seekbar进度改变时的通知。同时提供用户在SeekBar上开始和停止触摸手势时的通知。
//参数 lSeekBar的通知监听对象
//参见SeekBar.OnSeekBarChangeListener
1.在res/layout目录下定义一个布局文件seekbar.xml
<?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如下:
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 SeekBarseekBar,seekBar2,seekBar3;
private TextView textview,textview2;
privateImageViewimageView;
//标记是否需要刷新
private boolean flag=true;
private Handler hangler=new Handler();
////
privateint []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
privateOnSeekBarChangeListenerseekbar = 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
privateOnSeekBarChangeListeneronSeekbar=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();
}
}
三:执行效果如下: