Seekbar的onProgreesChanged在快速拖动时无法正常工作

时间:2016-01-11 10:08:06

标签: java android android-mediaplayer seekbar android-audiomanager

我已经在屏幕两侧创建了一个带有媒体播放器的DJ节目(如下图所示)

Screenshot of my app

移动时这两者之间的搜索栏应该增​​加一个媒体播放器的音量并分别减少其他媒体播放器的音量。当我非常慢地拖动它时效果很好,问题是当我更快地移动它时。 当拖得更快时,音量不会总是减少到最后,或者根本不会减小,超速时音量根本不会改变。 这是代码:

    private void initiateSeekBar()
{
    try
    {
        volumeSeekbar = (SeekBar)findViewById(R.id.seekBar);
        audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
        //volumeSeekbar.setMax(audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC));
        //volumeSeekbar.setProgress(audioManager.getStreamVolume(AudioManager.STREAM_MUSIC));
        final int initVolume = audioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
        final int maxVolume  = audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
        audioManager.setStreamVolume(AudioManager.STREAM_MUSIC,maxVolume, 0);

        volumeSeekbar.setOnSeekBarChangeListener(new OnSeekBarChangeListener()
        {
            @Override
            public void onStopTrackingTouch(SeekBar arg0)
            {
            }

            @Override
            public void onStartTrackingTouch(SeekBar arg0)
            {
            }

            @Override
            public void onProgressChanged(SeekBar arg0, int progress, boolean arg2)
            {
                float volume = (float) (1 - (Math.log(100 - progress) / Math.log(100)));
                //audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, progress, 0);
                if (volume <= 0.05) {
                    volume = 0;
                }
                System.out.println("\nVolume: \n" + volume);
                if (mediaplayerLeft != null) {
                    mediaplayerLeft.setVolume(1 -volume, 1 - volume);
                }
                if (mediaplayerRight != null) {
                    mediaplayerRight.setVolume(volume, volume);
                }
            }
        });
    }
    catch (Exception e)
    {
        e.printStackTrace();
    }
}

为什么会这样?那是搜索栏的工作原理还是我的代码有问题?

0 个答案:

没有答案