Android UI控件 拖动条SeekBar

    xiaoxiao2025-05-01  9

    之前所讲的ProgressBar是不可拖动的,是软件自动进行的。而像音乐播放器这种拖动条用户是可以通过拖动来进行操作的,这就需要用到SeekBar。 下面的程序使用SeekBar简单实现了一个播放器的播放条,没有进行拖动时会自动前进,用户进行拖动后在拖动后的地方开始继续。

    public class MainActivity extends AppCompatActivity { //定义的拖动条 private SeekBar sb; //用来显示进度 private TextView tv; private Timer timer; private TimerTask timerTask; //一开始进度为0 public int BarProgress = 0; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); sb = (SeekBar) findViewById(R.id.seekBar); tv = (TextView) findViewById(R.id.textView); //最大进度为50 sb.setMax(50); /*开始每隔一秒计一次时 * 这里计时后不用tv.setText,因为sb有一个监听器,只要当拖动条改变,不管改变是否来自用户,都会执行 * 详细的见后面的注释*/ timer = new Timer(); timerTask = new TimerTask() { @Override public void run() { if (BarProgress <= 50) { sb.setProgress(BarProgress); BarProgress++; } } }; timer.schedule(timerTask, 1000, 1000); /*设置拖动的监听器,SeekBar.OnSeekBarChangeListener()是一个抽象接口,需要实现三个方法 * public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) * public void onStartTrackingTouch(SeekBar seekBar) * 和public void onStopTrackingTouch(SeekBar seekBar) */ sb.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { /*当拖动条进度改变时执行,传入的参数分别是进度条,改变时的进程,和改变是否来自用户拖动 * 这里这种播放器的进度条的改变有两种情况,一种是播放时自动前进,另一种是用户进行拖动 * 显然前者的fromUser=false,后者的fromUser=true*/ @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { tv.setText(String.valueOf(progress)); BarProgress = progress; } //当拖动开始时执行,拖动一开始,定时器停止 @Override public void onStartTrackingTouch(SeekBar seekBar) { timer.cancel(); timerTask.cancel(); timer = null; timerTask = null; } //当拖动结束时执行,拖动一结束,定时器重新开始工作 @Override public void onStopTrackingTouch(SeekBar seekBar) { if (timer == null && timerTask == null && BarProgress <= 50) { timer = new Timer(); timerTask = new TimerTask() { @Override public void run() { sb.setProgress(BarProgress); BarProgress++; } }; timer.schedule(timerTask, 1000, 1000); } } }); } }

    如果将计时器放在拖动条监听器外面,在onProgressChanged方法中对BarProgress进行改变,会导致修改不成功,跳出onProgressChanged方法后拖动条进度又回去了,原因未知,可能后线程有关,在以后线程的学习中再回过头来看。

    转载请注明原文地址: https://ju.6miu.com/read-1298631.html
    最新回复(0)