如何在onStopTrackingTouch中获取onProgressChanged的int progress值并判断?
解决SeekBar在onStopTrackingTouch中获取progress值的问题
别担心,这个问题其实很好解决——核心就是把progress变量的作用域从onProgressChanged方法内部提升到类的成员变量级别,这样两个回调方法都能访问到它。
具体步骤如下:
- 在你的Activity/Fragment或者自定义SeekBar所在的类中,声明一个成员变量来保存当前进度:
private int mSeekBarProgress = 0; // 可以根据需求设置合适的默认值
- 在
onProgressChanged方法里,把每次变化的progress值赋值给这个成员变量:
@Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { // 将局部的progress同步到成员变量中 mSeekBarProgress = progress; // 你原本在这个方法里的其他业务逻辑可以正常保留 }
- 现在在
onStopTrackingTouch方法里,就可以直接使用这个成员变量来编写你的if判断逻辑了:
@Override public void onStopTrackingTouch(SeekBar seekBar) { // 直接用成员变量mSeekBarProgress做判断 if (mSeekBarProgress < 30) { // 进度小于30时执行的逻辑 } else if (mSeekBarProgress >= 30 && mSeekBarProgress < 70) { // 进度在30-70区间时执行的逻辑 } else { // 进度大于等于70时执行的逻辑 } }
如果你的页面里有多个SeekBar,还可以通过seekBar.getId()或者给SeekBar设置setTag()来区分不同的进度值:比如声明多个成员变量mMusicProgress、mVolumeProgress,或者用一个HashMap来存储不同SeekBar对应的进度数据。
这样就能完美解决你在onStopTrackingTouch中获取进度值的需求啦!
内容的提问来源于stack exchange,提问作者Rogeres Oliveira
相关产品推荐
相关产品推荐

