在以上代码中,我们通过setOnSeekBarChangeListener方法给SeekBar添加了一个监听器。当SeekBar的进度发生变化时,onProgressChanged方法就会被回调,我们可以在这个方法中获取SeekBar的当前进度值,并进行一些相应的操作。同理,当用户开始拖动SeekBar时,onStartTrackingTouch方法就会被回调;当用户停止拖动SeekBar时,onStopTrackingTouch方法就会被回调。
当SeekBar的进度发生变化时,onProgressChanged方法就会被回调,我们可以在这个方法中获取SeekBar的当前进度值,并进行一些相应的操作。setOnSeekBarChangeListener是SeekBar中的一个回调方法,用于监听SeekBar的变化,当SeekBar的值发生变化时,会回调SeekBar.OnSeekBarChangeListener中的相应方法。在这个方法中,我们可以保存SeekBar的当前进度值,比如将当前进度值保存到SharedPreferences中。
player.public static interface
SeekBar.On
SeekBarChangeListener
android.widget.
SeekBar.On
SeekBarChangeListener
当进度改变后用于通知客户端的回调函数。这包括用户通过手势、方向键或轨迹球触发的改变, 以及编程触发的改变。
公共
方法
private
SeekBar pb;
public static int currentSongIndex = 0;
private boolean isShuffle = false;
private boolean isRepeat = false;
public static final int player=1;
public static final int playlist=2;
public static final int
settings=3;
public static int ViewState=0;
public ImageView pl;
public ArrayList<HashMap<String, Object>> songList = new ArrayList<HashMap<String, Object>>();
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_layout);
final TabHost th = (TabHost) findViewById(R.id.tabhost);
bt_Next = (ImageButton) findViewById(R.id.next);
bt_Play = (ImageButton) findViewById(R.id.play);
bt_Previous = (ImageButton) findViewById(R.id.previous);
bt_Repeat=(ImageButton)findViewById(R.id.repeat);
bt_Shuffle=(ImageButton)findViewById(R.id.shuffle);
pl=(ImageView)findViewById(R.id.imageView1);
pl.
setAlpha(100);
SongTitle=(TextView)findViewById(R.id.songTitle);
songCurrentDurationLabel=(TextView)findViewById(R.id.currentTime);
songTotalDurationLabel=(TextView)findViewById(R.id.totalTime);
pb = (
SeekBar) findViewById(R.id.
seekbar);
mp = new MediaPlayer();
SongManager sm = new SongManager();
utils = new Utilities();
pb.
setOn
SeekBarChangeListener(this);
mp.
setOnCompletion
Listener(this);
songList = sm.getSongList();
playSong(0);
//
set the tabhost view
th.
setup();
th.addTab(th.newTabSpec("tab1")
.
setIndicator("歌曲", getResources().getDrawable(R.drawable.bg0))
.
setContent(R.id.ll_0));
th.addTab(th
.newTabSpec("tab2")
.
setIndicator("播放列表",
getResources().getDrawable(R.drawable.bg1))
.
setContent(R.id.ll_1));
th.addTab(th.newTabSpec("tab3")
.
setIndicator("设置", getResources().getDrawable(R.drawable.bg1))
.
setContent(R.id.ll_2));
// put the data from sdcard into list
ListAdapter adapter = new SimpleAdapter(this, getData(),
R.layout.list_item, new String[] { "songTitle","songTime" },
new int[] { R.id.songTitle ,R.id.songTime});
setListAdapter(adapter);
ListView lv = getListView();
// listening to single listitem click
lv.
setOnItemClick
Listener(new OnItemClick
Listener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
currentSongIndex = position;
playSong(currentSongIndex);
th.
setCurrentTab(0);
ViewState=player;
本源码主要是学习SeekBar、ProgressBar用法,拖动条与进度条结合,当拖动拖动条的时候,ProgressBar跟随着变化,普通拖拉条被拉动的处理代码:
SeekBar sb=(SeekBar)this.findViewById(R.id.SeekBar01);
sb.setOnSeekBarChangeListener(
new SeekBar.OnSeekBarChangeListener(){
public void onProgressChanged(SeekBar seekBar, int progress,
boolean fromUser) {
ProgressBar pb=(ProgressBar)findViewById(R.id.ProgressBar01);
SeekBar sb=(SeekBar)findViewById(R.id.SeekBar01);
pb.setProgress(sb.getProgress());
}
public void onStartTrackingTouch(SeekBar seekBar) { }
public void onStopTrackingTouch(SeekBar seekBar) { }
}
拖动条与进度条类似,所不同的是,拖动条允许用户拖动滑块来改变值,通常用于实现对某种数值的调节。例如,美图秀秀中的调整相片亮度的界面(如图 5.23 所示),以及在一键清理大师的设置界面中设置延迟时间和摇晃灵敏度的拖动条(如图 5.24 所示),都应用了拖动条。
基本语法:
<
SeekBar
android:layout_height="wrap_content"
android:id="@+id/
seekBar1"
android:layout_width="match_paren
1.SeekBar 是一个可以拖动的控件
seekbar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser)