2017-04-21 127 views
0

我必須設置VideoView中包含的視頻的音量。我必須使用SeekBar(我已經知道如何使用SeekBars,我只想知道如何設置視頻的音量)。 我也必須使用另一個SeekBar作爲控制欄。 這是我的代碼:將VideoView + SeekBar的視頻的音量設置爲控制條

positionBar = (SeekBar) this.findViewById(R.id.seekBar2); 
    volumeBar = (SeekBar) this.findViewById(R.id.seekBar); 

    //getting the max volume and the current volume to set the volume bar 
    audioManager = (AudioManager) this.getSystemService(Context.AUDIO_SERVICE); 
    maxVolume = audioManager.getStreamMaxVolume(AudioManager.USE_DEFAULT_STREAM_TYPE); 
    currentVolume = audioManager.getStreamVolume(AudioManager.USE_DEFAULT_STREAM_TYPE); 
    volumeBar.setMax(maxVolume); 
    volumeBar.setProgress(currentVolume); 

    //putting the video to execute in the video view 
    videoPlayer.setVideoPath("android.resource://" + getPackageName() + "/" + R.raw.video); 

    //volume bar listener 
    volumeBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { 

     @Override 
     public void onProgressChanged(SeekBar seekBar, int i, boolean b) { 


     } 

     @Override 
     public void onStartTrackingTouch(SeekBar seekBar) { 

     } 

     @Override 
     public void onStopTrackingTouch(SeekBar seekBar) { 

     } 
    }); 
    //******************************************************************** 

    //position bar listener 
    positionBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { 

     @Override 
     public void onProgressChanged(SeekBar seekBar, int i, boolean b) { 

     } 

     @Override 
     public void onStartTrackingTouch(SeekBar seekBar) { 

     } 

     @Override 
     public void onStopTrackingTouch(SeekBar seekBar) { 

     } 
    }); 
    //******************************************************************** 

    //timer to update the position bar during the video execution 
    //and the volume 
    new Timer().scheduleAtFixedRate(new TimerTask() { 

     @Override 
     public void run() { 

      currentVolume = audioManager.getStreamVolume(AudioManager.USE_DEFAULT_STREAM_TYPE); 
      volumeBar.setProgress(currentVolume); 
     } 
    }, 0 , 500); 
    //******************************************************************** 

回答

2

檢查下面的代碼,以編程方式設置視頻的音量。

SeekBar volumeBar; 
int volumeLevel; 
AudioManager audioManager; 
ImageView volumnBtn; 

@Override 
protected void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 

    ..... 

    ..... 

    volumeBar = (SeekBar) findViewById(R.id.volumeBar); 
    audioManager = (AudioManager) getSystemService(AUDIO_SERVICE); 
    volumeBar.setMax(audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC)); 
    volumeLevel = audioManager.getStreamVolume(AudioManager.STREAM_MUSIC); 

    volumnBtn = (ImageView) findViewById(R.id.volumnBtn); 

    if (volumeLevel == 0) { 
     volumnBtn.setImageDrawable(getResources().getDrawable(R.drawable.volumnMute)); 
    } else { 
     volumnBtn.setImageDrawable(getResources().getDrawable(R.drawable.volumnHigh)); 
    } 

    iv_volumn_btn.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      volumeLevel = audioManager.getStreamVolume(AudioManager.STREAM_MUSIC); 
      volumeBar.setProgress(volumeLevel); 
      if (volumeBar.getVisibility() == View.GONE) { 
       volumeBar.setVisibility(View.VISIBLE); 
      } else { 
       volumeBar.setVisibility(View.GONE); 
      } 
     } 
    }); 

    volumeBar.setProgress(volumeLevel); 
    volumeBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { 
     @Override 
     public void onProgressChanged(SeekBar seekBar, int i, boolean b) { 
      volumeLevel = i; 
      if (volumeLevel == 0) { 
       volumnBtn.setImageDrawable(getResources().getDrawable(R.drawable.volumnMute)); 
      } else { 
       volumnBtn.setImageDrawable(getResources().getDrawable(R.drawable.volumnHigh)); 
      } 
      audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, volumeLevel, 0); 
     } 

     @Override 
     public void onStartTrackingTouch(SeekBar seekBar) { 
     } 

     @Override 
     public void onStopTrackingTouch(SeekBar seekBar) { 
      volumeBar.setVisibility(View.GONE); 

      if (volumeLevel == 0) { 
       volumnBtn.setImageDrawable(getResources().getDrawable(R.drawable.volumnMute)); 
      } else { 
       volumnBtn.setImageDrawable(getResources().getDrawable(R.drawable.volumnHigh)); 
      } 
     } 
    }); 
} 
0

使用SeekBar.getProgress()讓你的搜索條值,然後使用該值來設置音量,在onProgressChanged方法。