多媒体_音乐播放器
第九章動畫干過一遍了,大部分都能理解套路。接下來學第十章
1、簡單的利用MediaPlayer制作音樂播放基礎
1.1先看看xml很簡單 定義幾個基本的按鈕
<span style="font-size:18px;"><?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:paddingBottom="@dimen/activity_vertical_margin"android:paddingLeft="@dimen/activity_horizontal_margin"android:paddingRight="@dimen/activity_horizontal_margin"android:paddingTop="@dimen/activity_vertical_margin"tools:context="com.example.hejingzhou.mp3.MainActivity"><TextViewandroid:id="@+id/textViewshow"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentTop="true"android:layout_centerHorizontal="true"android:text="State"android:textAppearance="?android:attr/textAppearanceLarge" /><Buttonandroid:id="@+id/buttonZanting"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignBaseline="@+id/buttonTingzhi"android:layout_alignBottom="@+id/buttonTingzhi"android:layout_toRightOf="@+id/buttonTingzhi"android:text="暫停" /><Buttonandroid:id="@+id/buttonKaishi"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_below="@+id/textViewshow"android:layout_marginTop="112dp"android:layout_toLeftOf="@+id/buttonTingzhi"android:text="開始" /><Buttonandroid:id="@+id/buttonTingzhi"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignBaseline="@+id/buttonKaishi"android:layout_alignBottom="@+id/buttonKaishi"android:layout_centerHorizontal="true"android:text="停止" /> </RelativeLayout></span>1.2 MainActivity
package com.example.hejingzhou.mp3;<span style="font-size:18px;">import android.media.MediaPlayer; import android.net.Uri; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.TextView;import java.io.File;public class MainActivity extends AppCompatActivity {private MediaPlayer mediaPlayer;private boolean isPause = false;//是否暫停private File file;private TextView textView;//聲明顯示提示信息@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);final Button buttonStart = (Button) findViewById(R.id.buttonKaishi);final Button buttonStop = (Button) findViewById(R.id.buttonTingzhi);final Button buttonZanting = (Button) findViewById(R.id.Zanting);final TextView textViewShow = (TextView) findViewById(R.id.textViewshow);file = new File("/data/mp3.mp3");//獲取播放的文件這個文件必須要指定放入同名的mp3文件if (file.exists()) { //</span><span style="font-size:18px; font-family: Arial, Helvetica, sans-serif;">返回一個boolean值,指示是否可以找到此文件·底層文件系統上。</span><span style="font-size:18px;">mediaPlayer = MediaPlayer.create(this, Uri.parse(file.getAbsolutePath()));//解析路徑文件傳遞給mediaPlayer對象} else {textViewShow.setText("要播放的文件不存在");buttonStart.setEnabled(false);//設置為Button不在響應return;}/*** 按鍵監聽* */mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {//注冊一個回調時要調用的媒體源底在回放期間,已達到。@Overridepublic void onCompletion(MediaPlayer arg0) {// TODO Auto-generated method stubpaly();}}); </span><pre name="code" class="java"><span style="font-size: 18px;">/*** 按鍵監聽* */</span> buttonStart.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View arg0) { // TODO Auto-generated method stub paly(); if (isPause) { buttonZanting.setText("暫停"); isPause = false; } buttonZanting.setEnabled(true); buttonStop.setEnabled(true); buttonStart.setEnabled(false);//播放不可用 } }); /** * 停止 * */ buttonStop.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View arg0) { // TODO Auto-generated method stub mediaPlayer.stop(); textViewShow.setText("停止播放音頻"); buttonZanting.setEnabled(false); buttonStop.setEnabled(false); buttonStart.setEnabled(true);//只允許開始可以操作 } }); /** * 暫停監聽 * */ buttonZanting.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View arg0) { // TODO Auto-generated method stub if (mediaPlayer.isPlaying() && !isPause)//如果狀態是在監聽中,或者是 不是暫停中 { mediaPlayer.pause();//暫停播放 isPause = true; ((Button) arg0).setText("繼續"); textViewShow.setText("暫停播放音頻"); buttonStart.setEnabled(true); } else { mediaPlayer.start(); ((Button) arg0).setText("暫停"); textViewShow.setText("播放音頻"); isPause = false; buttonStart.setEnabled(false); } } }); } /** * 播放 */ private void paly() { try { mediaPlayer.reset(); mediaPlayer.setDataSource(file.getAbsolutePath());//獲取文件的絕對路徑 mediaPlayer.prepare();//準備播放器 預加載音頻 mediaPlayer.start();//開始播放 } catch (Exception e) { e.printStackTrace(); } } @Override protected void onDestroy() { // TODO Auto-generated method stub if (mediaPlayer.isPlaying()) { mediaPlayer.stop(); } mediaPlayer.release();//釋放資源 super.onDestroy(); }}簡單的效果:
2、稍微復雜的帶有列表的播放器
2.1 xml文件 <span style="font-size:18px;color:#666600;"><?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:paddingBottom="@dimen/activity_vertical_margin"android:paddingLeft="@dimen/activity_horizontal_margin"android:paddingRight="@dimen/activity_horizontal_margin"android:paddingTop="@dimen/activity_vertical_margin"tools:context="com.example.hejingzhou.bofangsdquanbuyinpin.MainActivity"android:background="@drawable/eee"><LinearLayoutandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:orientation="horizontal"android:id="@+id/linearLayout"><Buttonandroid:id="@+id/buttnoBrodcast"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="播放"/><Buttonandroid:id="@+id/buttnoPause"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="暫停"/><Buttonandroid:id="@+id/buttonUp"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="上一首"/><Buttonandroid:id="@+id/buttonStop"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="停止"/></LinearLayout><ListViewandroid:id="@+id/listView"android:layout_width="match_parent"android:layout_height="match_parent"android:drawSelectorOnTop="false"android:layout_below="@+id/linearLayout" /><Buttonandroid:id="@+id/buttonDown"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="下一首"android:layout_above="@+id/listView"android:layout_toRightOf="@+id/linearLayout"android:layout_toEndOf="@+id/linearLayout" /><!--android:drawSelectorOnTop="true" 點擊某一條記錄,顏色會顯示在最上面,記錄上的文字被遮住,所以點擊文字不放,文字就看不到android:drawSelectorOnTop="false" 點擊某條記錄不放,顏色會在記錄的后面,成為背景色,但是記錄內容的文字是可見的--></RelativeLayout></span><span style="color:#ff0000;"> </span>2.2MainActivity
package com.example.hejingzhou.bofangsdquanbuyinpin;<span style="font-size:18px;color:#666600;">import android.media.MediaPlayer; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.ListView;import java.io.File; import java.util.ArrayList; import java.util.List;public class MainActivity extends AppCompatActivity {private MediaPlayer mediaPlayer;private List<String> audioList = new ArrayList<String>();//定義一個存放音頻的List表private int currentItem = 0;//當前項 當前播放歌曲的索引private Button buttonPause;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);mediaPlayer = new MediaPlayer();//實例化mediaPlayer對象Button buttonUp = (Button) findViewById(R.id.buttonUp);Button buttonBrodcast = (Button) findViewById(R.id.buttnoBrodcast);buttonPause = (Button) findViewById(R.id.buttnoPause);Button buttonStop = (Button) findViewById(R.id.buttonStop);Button buttonDown = (Button) findViewById(R.id.buttonDown);audioList();/*** 為MediaPlayer 對象添加完成事件的監聽器 在重寫onCompletion方法中調用nextMusic()方法播放下一首音樂* */mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {@Overridepublic void onCompletion(MediaPlayer mp) {nextMusic();//播放下一首}});buttonUp.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {preMusic();}});buttonBrodcast.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {playMusic(audioList.get(currentItem));}});buttonPause.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {if(mediaPlayer.isPlaying()){mediaPlayer.pause();((Button)v).setText("繼續");}else{mediaPlayer.reset();//繼續播放((Button) v).setText("暫停");}}});buttonStop.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {if(mediaPlayer.isPlaying()){mediaPlayer.stop();}buttonPause.setEnabled(false);}});buttonDown.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {nextMusic();}});}private void audioList() {getFiles("/data/SD/");//自己定 存放資源ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, audioList);//創建一個適配器ListView listView = (ListView) findViewById(R.id.listView);listView.setAdapter(adapter);//將list列表設置一個適配器listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {@Overridepublic void onItemClick(AdapterView<?> parent, View view, int position, long id) {currentItem = position;//將當前項的索引值傳遞給currentItemplayMusic(audioList.get(currentItem));}});}/*** 定義一個保存合法的文件格式的字符串數組,并編寫根據文件路徑判斷文件是否為音頻文件方法* */private static String[] imageFormatSet = new String[] {"mp3","wav","3gp"};private static boolean isAudioFile(String path){for(String format : imageFormatSet){if(path.contains(format))//如果包含擇個字符{return true;}}returnfalse;}/*** getFiles()函數 查找路徑中的所有音頻文件 并且將他添加到list里* */private void getFiles(String url){File files = new File(url);//創建一個新的文件對象File[] file = files.listFiles();//listFiles()該方法返回的路徑名用于表示此抽象路徑名的目錄中的文件和目錄的數組。try{for(File f : file)//遍歷這個數組獲取到的文件數組{if(f.isDirectory()) //如果是文件夾,那么就遞歸調用{getFiles(f.getPath());//遞歸}else{if(isAudioFile(f.getPath())){audioList.add(f.getPath());//找到音頻文件并且將它添加到audioList表里}}}}catch (Exception e){e.printStackTrace();}}/*** 播放*/void playMusic(String path) {try {if (mediaPlayer.isPlaying()) {mediaPlayer.stop();}mediaPlayer.reset();mediaPlayer.setDataSource(path);//指定要播放文件的路徑mediaPlayer.prepare();//預加載音頻文件mediaPlayer.start();//播放音頻buttonPause.setText("暫停");buttonPause.setEnabled(true);} catch (Exception e) {e.printStackTrace();}}/*** 下一首* */void nextMusic(){if(++currentItem >= audioList.size())//當對currentItem 進行+1操作后,如果其值大于等于音頻文件的總數{currentItem = 0;}playMusic(audioList.get(currentItem));//調用playMusic()方法播放音樂}/*** 上一首* */void preMusic(){if(--currentItem >= 0)// 當對currentItem進行-1操作后 如果對其值大于等于0{if(currentItem >= audioList.size())//如果currentItem的值大于等于音頻總數{currentItem = 0;}}else{currentItem = audioList.size() - 1;}playMusic(audioList.get(currentItem));}}</span>
存放指定文件路徑
效果
源代碼 :?http://download.csdn.net/detail/csdnhejingzhou/9368472
總結
- 上一篇: 开发在线编程网站
- 下一篇: 计算机视觉实验四 人脸面部识别