我正在使用 videoView 来播放视频。
bVideoView = (VideoView) findViewById(R.id.bVideoView);
bVideoView.setVideoPath(videoPath);
现在我有一个按钮,
audioToggle = (Button) findViewById(R.id.audioToggle);
然后我有按钮的 OnClickListener
private static int aux = 0;
private AudioManager mAudioManager;
audioToggle.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
bVideoView.start();
mAudioManager = (AudioManager)getSystemService(Context.AUDIO_SERVICE);
if(aux % 2 == 0){
mAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC, 50, 0);
aux++;
} else {
mAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC, 0, 0);
aux++;
}
}
});
现在有了这个OnClickListener
,我完全能够在每次单击音频时将音频切换为静音和取消静音。不过我想要这样的东西,
- 第一次点击时,videoView 应该启动。
- 当我持续按下按钮时,音频必须静音。
- 当我释放按钮时,音频必须取消静音。
我做了很多尝试,但都以某种方式失败了。请帮忙。
最佳答案
你的意思是:
- The first time I hold the button, the video should play.
- While I'm holding the button the audio must be heard.
- When I release the button, the audio must be muted.
- When I press and hold the button again, the audio must be heard again.
那么您需要的不是 OnClickListener
而是 OnTouchListener
幕后发生的事情是,您的 OnClickListener
始终在您松开手指后被调用。使用View.OnTouchListener
,您可以在按下(指触摸并按住)和释放时调度事件。
参见http://developer.android.com/reference/android/view/View.OnTouchListener.html
这是一个示例 fragment :
private static int aux = 0;
private AudioManager mAudioManager;
audioToggle.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent e) {
bVideoView.start();
mAudioManager = (AudioManager)getSystemService(Context.AUDIO_SERVICE);
switch(e.getActionMasked()) {
case MotionEvent.ACTION_DOWN:
mAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC, 50, 0);
break;
case MotionEvent.ACTION_UP:
mAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC, 0, 0);
break;
}
return true;
}
}
最后,我不建议控制系统的音量。请改用 MediaPlayer.OnPreparedListener
,获取 VideoView
的 MediaPlayer
,然后调整其音量。
编辑:
这是另一个示例 fragment :
private MediaPlayer bVideoViewMP;
bVideoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
// Fetch a reference
bVideoViewMP = mp;
}
});
audioToggle.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent e) {
bVideoView.start();
switch(e.getActionMasked()) {
case MotionEvent.ACTION_DOWN:
bVideoViewMP.setVolume(0.75f, 0.75f);
break;
case MotionEvent.ACTION_UP:
bVideoViewMP.setVolume(0, 0);
break;
}
return true;
}
}
在 VideoView
完全准备好之前,这些应该放置在 fragment 的 onViewCreated()
或 Activity 的 onCreate()
方法上.
关于java - 使用按钮切换 VideoView 的音频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30448525/