MediaPlayer和SeekBar配合起来

2024-09-04 22:18

本文主要是介绍MediaPlayer和SeekBar配合起来,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

MediaPlayer和SeekBar配合在一起的例子。

预备

  • MediaPlayer
  • SeekBar使用方法
  • Handler使用方法

例子

my_layout.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical" ><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"><!-- Use LinearLayout to seperate the two buttons. So clear the warning:Buttons in button bars should be borderless;  --><LinearLayoutandroid:layout_width="wrap_content"android:layout_height="match_parent"android:orientation="vertical" ><Buttonandroid:id="@+id/start"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@string/start" /></LinearLayout><LinearLayoutandroid:layout_width="wrap_content"android:layout_height="match_parent"android:orientation="vertical" ><Buttonandroid:id="@+id/stop"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@string/stop" /></LinearLayout></LinearLayout><SeekBarandroid:id="@+id/mediaSeekBar"android:layout_width="match_parent"android:layout_height="wrap_content" /></LinearLayout>

代码

package com.example.mediaplayerexample;import java.io.IOException;import android.app.Activity;
import android.content.res.AssetFileDescriptor;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnCompletionListener;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.SeekBar;
import android.widget.SeekBar.OnSeekBarChangeListener;public class MainActivity extends Activity {private final String TAG = "MainActivity";private MediaPlayer mediaPlayer = null;private Button start = null;private Button stop = null;private SeekBar mediaSeekBar = null;boolean isPlaying = false;private final int MONITOR_MSG_ID = 0;private Thread monitor = null;private Handler handler = new Handler() {@Overridepublic void handleMessage(Message msg) {if (!isPlaying || msg.what != MONITOR_MSG_ID) {super.handleMessage(msg);return;}mediaSeekBar.setProgress(mediaPlayer.getCurrentPosition());}};@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.my_layout);start = (Button) findViewById(R.id.start);stop = (Button) findViewById(R.id.stop);stop.setEnabled(false);start.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {try {mediaPlayer.prepare();} catch (IllegalStateException e) {Log.d(TAG, "start click error", e);} catch (IOException e) {Log.d(TAG, "start click error", e);}isPlaying = true;mediaPlayer.start();mediaSeekBar.setMax(mediaPlayer.getDuration());start.setEnabled(false);stop.setEnabled(true);monitor = new MonitorThread(1000);monitor.start();}});stop.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {isPlaying = false;mediaPlayer.stop();start.setEnabled(true);stop.setEnabled(false);try {monitor.join();} catch (InterruptedException e) {Log.d(TAG, "stop click error", e);}}});Log.d(TAG, "new MediaPlyer()");mediaPlayer = new MediaPlayer();mediaPlayer.setOnCompletionListener(new OnCompletionListener() {@Overridepublic void onCompletion(MediaPlayer mp) {isPlaying = false;start.setEnabled(true);stop.setEnabled(false);try {monitor.join();} catch (InterruptedException e) {Log.e(TAG, "start thread failed.", e);}}});Log.d(TAG, "Set data source");AssetFileDescriptor fd = null;try {fd = getResources().openRawResourceFd(R.raw.test);mediaPlayer.setDataSource(fd.getFileDescriptor(), fd.getStartOffset(), fd.getLength());fd.close();Log.d(TAG, "set data source ok");} catch (IOException e) {Log.e(TAG, "set data source failed.", e);finish();}mediaSeekBar = (SeekBar) findViewById(R.id.mediaSeekBar);mediaSeekBar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {@Overridepublic void onProgressChanged(SeekBar seekBar, int progress,boolean fromUser) {}@Overridepublic void onStartTrackingTouch(SeekBar seekBar) {}@Overridepublic void onStopTrackingTouch(SeekBar seekBar) {if (isPlaying) {mediaPlayer.seekTo(seekBar.getProgress());}}});Log.d(TAG, "create ok");}@Overridepublic 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;}@Overridepublic boolean onOptionsItemSelected(MenuItem item) {// Handle action bar item clicks here. The action bar will// automatically handle clicks on the Home/Up button, so long// as you specify a parent activity in AndroidManifest.xml.int id = item.getItemId();if (id == R.id.action_settings) {return true;}return super.onOptionsItemSelected(item);}private class MonitorThread extends Thread{private int interval;public MonitorThread(int interval) {this.interval = interval;}public void run(){Log.d(TAG, "MonitorThread::run()");while(true) {if (!isPlaying) return;try {sleep(interval);} catch (InterruptedException e) {e.printStackTrace();}handler.sendEmptyMessage(MONITOR_MSG_ID);}}}
}

这篇关于MediaPlayer和SeekBar配合起来的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1137188

相关文章

Android MediaPlayer类详解

MediaPlayer类可用于控制音频/视频文件或流的播放。关于如何使用这个类的方法还可以阅读SDK API中VideoView类的文档。 1.状态图 对播放音频/视频文件和流的控制是通过一个状态机来管理的。下图显示一个MediaPlayer对象被支持的播放控制操作驱动的生命周期和状态。椭圆代表MediaPlayer对象可能驻留的状态。弧线表示驱动MediaPlayer在各个状

Android -- 视频音频多媒体播放,在线播放, MediaPlayer, SurfaceView, SoundPool, Timer定时器使用

1. SoundPool 用于快速重复的播放短音频 [java]  view plain copy public class MainActivity extends Activity {       private SoundPool soundPool;       private int soundId;          @Override       protec

Android MediaPlayer本地视频播放器

该文章的目的是,让初学者能够快速掌握一个简单的本地视频播放器。该Demo中用到了SurfaceView、MediaPlayer。 实现效果图: [html]  view plain copy <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

MediaPlayer播放网络视频

本文来自http://blog.csdn.net/hellogv/ ,引用必须注明出处!        上次讲解了MediaPlayer播放网络音频,介绍了MediaPlayer关于网络音频的缓冲和进度条控制的方法,这次再讲解MediaPlayer播放网络视频。播放网络视频比播放网络音频多需要一个SurfaceView而已,已经熟悉MediaPlayer播放网络音频之后,相信大家对播放网络视

Android MediaPlayer使用方法简单介绍---(setdatasource)

1)如何获得MediaPlayer实例: 可以使用直接new的方式: MediaPlayer mp = new MediaPlayer(); 也可以使用create的方式,如: MediaPlayer mp = MediaPlayer.create(this, R.raw.test);//这时就不用调用setDataSource了 2) 如何设

android媒体--图库与API层MediaPlayer的交互

一、引子 众所周知一个媒体播放器新建的几个步骤: [java]  view plain copy print ? Mediaplayer mp  = new MediaPlayer()   mp.setDatasource(xxx);   mp.setDispalyer(xxx);   mp.setAudioStreamType(xxx);   mp.prepareA

SeekBar使用方法

概述 本文讨论SeekBar的使用方法。 在http://blog.csdn.net/a_flying_bird/article/details/50948916一文讨论了Handler的使用方法,这是本文的基础。本文使用同样的示例,即一个计算任务。 Class Overview A SeekBar is an extension of ProgressBar that adds a dr

自定义控件 - SeekBar,支持横竖两种状态,支持分段,滑动带动画效果

转载请标明出处: http://blog.csdn.net/u013254166/article/details/79161348 本文出自: 【rhino博客】  直接上效果图,实现很简单,这里就不赘述了。 最后附上源码下载链接,点击下载。

Android 自定义SeekBar动态改变 硬件音量大小 实现和音量键的同步

1,上图: 2,代码: MainActivity.java package com.hero.zhaoq.seekbarchangeddemo;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.con

MediaPlayer播放音频文件

1,普通MediaPlayer播放音频文件 activity_sound_player.xml <?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"an