每天写个APP——第 1 天

每天写个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

实现中间图片的旋转,和播放进度的展示。

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。