每周写个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
实现中间图片的旋转,和播放进度的展示。