所以,我想要做的是在rangeSeekBar的两个thumb-min和max之间播放音频的一部分或一部分。我使用下面的库来实现此功能。 https://github.com/YahooArchive/android-range-seek-bar
有了我的一些逻辑,我已经实现了功能。但我不知道音频并不总是停在最大位置。此外,现在因为我使用自定义视图,我无法显示进度指示器,例如当前音频播放的位置。 RangeSeekbar没有以下方法。
seekbar.setProgress(int duration);
因此,很难看出音乐实际播放的位置。我想要一个像这样的功能。
有谁能告诉我如何实现这个目标?
以下是相关代码。
MainActivity.java
public class MainActivity extends AppCompatActivity {
RangeSeekBar<Integer> mRangeSeekBar;
MediaPlayer mMediaPlayer;
Button playButton;
TextView mEndTextView;
static int max;
SeekBar mSeekBar;
Runnable mRunnable;
Handler mHandler;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mRangeSeekBar = findViewById(R.id.rangeSeekBar);
mSeekBar = findViewById(R.id.seekBar);
mRangeSeekBar.setNotifyWhileDragging(true);
playButton = findViewById(R.id.play);
mEndTextView = findViewById(R.id.end_duration);
mHandler = new Handler();
mMediaPlayer = MediaPlayer.create(this, R.raw.song);
max = mMediaPlayer.getDuration();
mRangeSeekBar.setRangeValues(0, mMediaPlayer.getDuration());
mSeekBar.setMax(mMediaPlayer.getDuration());
playButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mMediaPlayer.start();
playProgress();
}
});
mRangeSeekBar.setOnRangeSeekBarChangeListener(new RangeSeekBar.OnRangeSeekBarChangeListener<Integer>() {
@Override
public void onRangeSeekBarValuesChanged(RangeSeekBar<?> bar, Integer minValue, Integer maxValue) {
mMediaPlayer.seekTo(minValue);
max = maxValue;
}
});
}
private void playProgress() {
if(mMediaPlayer.getCurrentPosition() == max) {
mMediaPlayer.stop();
}
if (mMediaPlayer.isPlaying()) {
mRunnable = new Runnable() {
@Override
public void run() {
playProgress();
}
};
mHandler.postDelayed(mRunnable, 0);
}
}
activity_main.xml中
<com.yahoo.mobile.client.android.util.rangeseekbar.RangeSeekBar
android:id="@+id/rangeSeekBar"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginEnd="16dp"
android:layout_marginStart="16dp"
android:layout_marginTop="32dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"/>
依赖
implementation'com.yahoo.mobile.client.android.util.rangeseekbar:rangeseekbar-library:0.1.0'