3

所以,我想做的是在 rangeSeekBar 的两个拇指最小值和最大值之间播放音频的一部分或部分。我已经使用下面的库来实现这个功能。 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"/>

依赖

实施 'com.yahoo.mobile.client.android.util.rangeseekbar:rangeseekbar-library:0.1.0'

4

0 回答 0