每天寫個APP_第 1 天——簡單的音樂播放器,app音樂播放器
每天寫個APP——第 1 天1.寫個音樂播放器
——今天寫個“MusicPlayer” APP 即一個音樂播放器。實現簡單的音樂播放功能。^_^。
使用方法:在文字框內輸入你要聽的歌曲名字(前提是手機裡有的),然後點擊播放就可以享受音樂了!你或者會說,這也太LOW了吧!放心,你會喜歡去寫和嘗試這個應用!況且這隻是第一步!以後我們逐漸完善這個APP!
編程關鍵詞!:
- MediaPlayer類的使用
- Activity的生命週期
- 如何去掉TitieBar
- LinearLayout的使用
- v_v你的介面設計審美觀
2.APP主介面
——是不是有種MDesign的感腳(顯然很牽強),以後會更多運用這種設計語言。關於軟體介面的設計,一定要用心,不能只重視背景程式。對於使用者體驗要求極高的移動APP,必須得花費一定的心思。當然,這和你的審美有很大的關係!!!!介面的設計需要一定的美工技術,筆者畫畫還可以,可是PS神碼的軟體還真是不熟,沒關係,這個網站很棒:easyicon
上代碼
詳細解釋請看注釋
介面xml
很簡單就一個介面檔案
<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:background="#ff646469" tools:context=".MainActivity"> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:weightSum="1"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:paddingTop="15dp" android:textSize="35sp" android:textColor="#fff" android:text="音樂播放器"/> <TextView android:layout_marginTop="25dp" android:id="@+id/text_songName" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:textColor="#fff" android:textSize="19sp" android:text="好妹妹"/> <ImageView android:layout_marginTop="15dp" android:id="@+id/image_songImage" android:layout_width="290dp" android:layout_height="290dp" android:layout_gravity="center" android:src="@drawable/cd"/> <EditText android:layout_gravity="center" android:id="@+id/edit_songName" android:layout_width="wrap_content" android:layout_height="wrap_content" android:hint="輸入歌曲名"/> <LinearLayout android:layout_marginTop="30dp" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" > <Button android:id="@+id/button_pause" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="3.333" android:textColor="#ff5c5c5c" android:text="暫停"/> <Button android:id="@+id/button_start" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="3.333" android:textColor="#ff5c5c5c" android:text="播放"/> <Button android:id="@+id/button_stop" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="3.333" android:textColor="#ff5c5c5c" android:text="停止"/> </LinearLayout> </LinearLayout></RelativeLayout>
Java代碼——MainActivity.java
MainActivity.java
package com.river.root.musicplayer;import android.app.Activity;import android.media.MediaPlayer;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.view.View;import android.view.animation.Animation;import android.view.animation.RotateAnimation;import android.widget.Button;import android.widget.EditText;import android.widget.ImageView;import android.widget.TextView;import java.io.IOException;public class MainActivity extends Activity { private ImageView songImage; private TextView songText; private Button songStart; private Button songStop; private Button songPause; private EditText editSongName; private MediaPlayer musicPlayer; private Handler handler; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //繫結控制項 songImage=(ImageView)findViewById(R.id.image_songImage); songText=(TextView)findViewById(R.id.text_songName); editSongName=(EditText)findViewById(R.id.edit_songName); songStart=(Button)findViewById(R.id.button_start); songStop=(Button)findViewById(R.id.button_stop); songPause=(Button)findViewById(R.id.button_pause); //執行個體化MediaPlayer musicPlayer= new MediaPlayer(); //為三個按鈕設定監聽器 songPause.setOnClickListener(new ButtonListener()); songStop.setOnClickListener(new ButtonListener()); songStart.setOnClickListener(new ButtonListener()); } private class ButtonListener implements View.OnClickListener{ @Override public void onClick(View view) { try{ switch (view.getId()){ case R.id.button_start: //檔案名稱 String fileName=editSongName.getText().toString(); songText.setText(fileName); //恢複原始介面 if(songPause.getText().equals("繼續")){ songPause.setText("暫停"); } //重設 musicPlayer.reset(); //檔案路徑 musicPlayer.setDataSource("/sdcard/netease/cloudmusic/Music/"+fileName+".mp3"); musicPlayer.prepare(); musicPlayer.start(); break; case R.id.button_stop: musicPlayer.stop(); songPause.setText("暫停"); break; case R.id.button_pause: //注意介面的更改 if(musicPlayer.isPlaying()){ musicPlayer.pause(); ((Button)view).setText("繼續"); }else{ musicPlayer.start(); ((Button)view).setText("暫停"); } break; } }catch (IOException e){ e.printStackTrace(); } } } @Override protected void onPause() { super.onPause(); if(musicPlayer!=null){ if(musicPlayer.isPlaying()) musicPlayer.stop(); } } @Override protected void onResume() { super.onResume(); if(musicPlayer!=null){ if(musicPlayer.isPlaying()) musicPlayer.start(); } } @Override protected void onDestroy() { super.onDestroy(); if(musicPlayer!=null){ if(musicPlayer.isPlaying()) musicPlayer.stop(); musicPlayer.release(); } }}
以上代碼不是很難,主要是MediaPlayer類的使用。但要注意介面的變化和Activity生命週期的應用。
明天的APP
實現中間圖片的旋轉,和播放進度的展示。