拖动条能够由用户自己进行手工的调节,比如:当用户须要调整播放器音量或者是电影的播放进度时都会使用到拖动条,SeekBar类的定义结构例如以下所看到的:
java.lang.Object
↳ android.view.View
↳ android.widget.ProgressBar
↳ android.widget.AbsSeekBar
↳ android.widget.SeekBar
经常用法
public SeekBar(Context context) | 构造 | 创建SeekBar类的对象 |
public void setOnSeekBarChangeListener( SeekBar.OnSeekBarChangeListener l) | 普通 | 设置改变监听操作 |
public synchronized void setMax(int max) | 普通 | 设置增长的最大值 |
public static interface SeekBar.OnSeekBarChangeListener{
/**
* 開始拖动时触发操作
* @param seekBar 触发操作的SeekBar组件对象
*/
public abstract void onStartTrackingTouch(SeekBar seekBar) ;
/**
* @param seekBar 触发操作的SeekBar组件对象
* @param progress 当前的进度值
* @param fromUser 是否为用户自己触发
*/
public abstract void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) ;
/**
* 停止拖动时触发操作
* @param seekBar 触发操作的SeekBar组件对象
*/
public abstract void onStopTrackingTouch(SeekBar seekBar) ;
}
主要的使用
xml文件
java文件 package com.example.seekbar;import android.app.Activity;import android.os.Bundle;import android.widget.SeekBar;import android.widget.SeekBar.OnSeekBarChangeListener;import android.widget.TextView;public class MainActivity extends Activity implements OnSeekBarChangeListener{ private TextView textView1,textView2; private SeekBar seekBar1,seekBar2; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); textView1=(TextView)this.findViewById(R.id.textView1); textView2=(TextView)this.findViewById(R.id.textView2); seekBar1=(SeekBar)this.findViewById(R.id.seekBar1); seekBar2=(SeekBar)this.findViewById(R.id.seekBar2); seekBar1.setOnSeekBarChangeListener(this); seekBar2.setOnSeekBarChangeListener(this); } @Override public void onProgressChanged(SeekBar seekBar, int position, boolean flag) { // TODO Auto-generated method stub if (seekBar.getId()==seekBar1.getId()) { textView1.setText("当前seekbar1刻度"+position); } else { textView2.setText("当前seekbar2刻度"+position); } } @Override public void onStartTrackingTouch(SeekBar seekBar) { // TODO Auto-generated method stub if (seekBar.getId()==seekBar1.getId()) { textView1.setText("開始滑动seek1"); } else { textView2.setText("開始滑动seek2"); } } @Override public void onStopTrackingTouch(SeekBar seekBar) { // TODO Auto-generated method stub if (seekBar.getId()==seekBar1.getId()) { textView1.setText("停止滑动seek1"); } else { textView2.setText("停止滑动seek2"); } } }
效果图 使用seekbar来控制屏幕的亮度
xml文件
JAVA文件 package com.example.seekbardemo;import android.app.Activity;import android.os.Bundle;import android.view.WindowManager;import android.widget.SeekBar;import android.widget.SeekBar.OnSeekBarChangeListener;public class MainActivity extends Activity implements OnSeekBarChangeListener {private SeekBar myseekBar; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); myseekBar=(SeekBar)this.findViewById(R.id.seekBar1); myseekBar.setOnSeekBarChangeListener(this); } @Override public void onProgressChanged(SeekBar seekBar, int position, boolean flag) { // TODO Auto-generated method stub }//调节亮度的方法 private void setScreenBrightness(float num) { WindowManager.LayoutParams layoutParams = getWindow().getAttributes(); // 取得window属性 layoutParams.screenBrightness = num; // num已经除以100 super.getWindow().setAttributes(layoutParams); // 0~1之间 } @Override public void onStartTrackingTouch(SeekBar arg0) { // TODO Auto-generated method stub }//在拖动结束是使用getProgress获得当前的Progress值来设置亮度 @Override public void onStopTrackingTouch(SeekBar seekBar) { // TODO Auto-generated method stub if (seekBar.getId()==myseekBar.getId()) {// 将progress除以100并转换为float类型 setScreenBrightness((float)seekBar.getProgress()/100); } }}
效果图 改变后
当然,使用SeekBar组件也能够对音量进行控制,大家能够查询相关API自行尝试
下节预报:RatingBar评分组件