MediaPlayer 음악 재생기 진행률 막대
5254 단어 android진행률 표시줄mediaplayer
1 실시간으로 진행 상태 표시
2 재생 속도 수동 조절
현재 학습 슬래그는 새로운 프로젝트를 만들어 테스트를 진행하고 있으며, 후기에는 이전 블로그에서 소개한 슬라이딩 페이지와 통합할 것입니다. 서비스가 구축된 후에 통합될 것으로 예상됩니다. 기대해 주십시오...
자, 먼저 효과도 올리기:
진행률 막대 사용에 대한 기본 원리는 간단합니다.
1곡의 시간: 단위는 밀리초, 미디어플레이어의 getDuration()이지만 getDuration()의 사용 상태에 주의해야 한다. 이 블로그에서 미디어플레이어의 각 상태를 소개했으니 여러분이 보실 수 있다.
2 진도표의 길이:android에서 진도표의 길이는 기본적으로 100이어야 하며 단위가 불분명하여 영향을 주지 않습니다
3 현재 진도: 노래의 경우 현재 진도는 현재 재생된 노래가 있는 위치이고 단위는 밀리초이며 진도표의 경우 진도표에서 차지하는 비율이다.주로 이 두 가지를 전환시킨다.
두 가지 기능:
1 진도가 실시간으로 업데이트되어야 하기 때문에 시스템에서 하나의 라인으로 UI 라인에 메시지를 보내고(100밀리초 간격으로) UI 라인에서handler로 메시지를 포착하여 미디어플레이어의 getcurrentPosition을 통해 현재 위치를 얻어서seekbar에 대응하는 위치를 계산하여seekbar에 대한 업데이트를 제때에 진행한다.
2 수동으로 곡의 진도를 조절할 때 조절된 위치를 획득하여 SeekBar를 통해 조절한다.원섹바체인지 리스터()는 슬라이더를 감청하고, 슬라이더 조절 위치가 정해지면 온스톱트래킹 터치(onStopTrackingTouch)를 통해 곡의 진도를 제때 업데이트하고, 미디어플레이어의 seekTo(단위는 밀리초)로 곡의 진도를 조절한다.
구체적인 코드는 다음과 같습니다.
[java] view plain copy CODE에서 코드 슬라이스를 보고 내 코드 슬라이스 public class MainActivity extends Activity {
MediaPlayer mediaPlayer;
SeekBar seekBar;
//
String path = "/storage/sdcard1/Music/ .mp3";
//
Handler mHandler = new Handler(){
@Override
public void handleMessage(Message msg){
switch (msg.what){
case 0:
//
int position = mediaPlayer.getCurrentPosition();
int time = mediaPlayer.getDuration();
int max = seekBar.getMax();
seekBar.setProgress(position*max/time);
break;
default:
break;
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
init();
//
Button playButton = (Button)findViewById(R.id.playButton);
playButton.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
Toast.makeText(MainActivity.this, "time is "+mediaPlayer.getDuration(), 1000).show();
play();
}
});
//
Button pauseButton = (Button)findViewById(R.id.pauseButton);
pauseButton.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
pause();
}
});
seekBar = (SeekBar)findViewById(R.id.seekbar);
seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
//
// TODO Auto-generated method stub
int dest = seekBar.getProgress();
int time = mediaPlayer.getDuration();
int max = seekBar.getMax();
mediaPlayer.seekTo(time*dest/max);
}
@Override
public void onStartTrackingTouch(SeekBar arg0) {
// TODO Auto-generated method stub
}
@Override
public void onProgressChanged(SeekBar arg0, int arg1, boolean arg2) {
// TODO Auto-generated method stub
}
});
}
//초기화 음악 재생void init() {//Idle mediaPlayer 시작 = new MediaPlayer (), try {//초기화 mediaPlayer.setDataSource(path)
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
// prepare
mediaPlayer.prepareAsync();
//
final int milliseconds = 100;
new Thread(){
@Override
public void run(){
while(true){
try {
sleep(milliseconds);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
mHandler.sendEmptyMessage(0);
}
}
}.start();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//
void play(){
mediaPlayer.start();
}
//
private void pause() {
if (mediaPlayer != null && mediaPlayer.isPlaying()) {
mediaPlayer.pause();
}
}
//activity , ,
@Override
protected void onDestroy() {
// activity
if (mediaPlayer != null && mediaPlayer.isPlaying()) {
mediaPlayer.stop();
mediaPlayer.release();
mediaPlayer = null;
}
super.onDestroy();
} @Override public boolean onCreateOptionsMenu(Menu menu) { //Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; }
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Kotlin의 기초 - 2부지난 글에서는 Kotlin이 무엇인지, Kotlin의 특징, Kotlin에서 변수 및 데이터 유형을 선언하는 방법과 같은 Kotlin의 기본 개념에 대해 배웠습니다. 유형 변환은 데이터 변수의 한 유형을 다른 데이터...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.