progressBar 上有一个button,button有自己的点击事件,现在手指在button上按下然后滑动时,progressBar 要怎么响应滑动事件
时间: 2024-01-21 21:03:24 浏览: 61
Android-progressSeekBar一款进度条控件可点可滑动
在手指按下时,我们可以保存当前的进度值和手指按下的位置,然后在手指滑动时计算出手指移动的距离,将其转换为进度值的变化,并更新进度条的进度。
具体实现如下:
1. 在button的`onTouch`事件中,判断手指是否按下,并保存当前进度值和手指按下的位置:
```
button.setOnTouchListener(new View.OnTouchListener() {
int progress = 0;
float lastX = 0;
boolean isDragging = false;
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
progress = progressBar.getProgress();
lastX = event.getX();
isDragging = true;
break;
case MotionEvent.ACTION_MOVE:
if (isDragging) {
float deltaX = event.getX() - lastX;
int deltaProgress = (int) (deltaX / progressBar.getWidth() * progressBar.getMax());
progressBar.setProgress(progress + deltaProgress);
}
break;
case MotionEvent.ACTION_UP:
case MotionEvent.ACTION_CANCEL:
isDragging = false;
break;
}
return false;
}
});
```
2. 在进度条的`onProgressChanged`事件中,检查是否正在拖动,如果是则取消进度条的自动更新:
```
progressBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
boolean isDragging = false;
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
if (isDragging) {
seekBar.setThumb(null);
seekBar.setEnabled(false);
}
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
isDragging = true;
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
isDragging = false;
seekBar.setThumb(ContextCompat.getDrawable(MainActivity.this, android.R.drawable.ic_menu_add));
seekBar.setEnabled(true);
}
});
```
这样就能实现在手指滑动button时,进度条也能跟着更新了。
阅读全文