一.开发需求
这是一个可以登录的音乐播放器,主要功能有登录,注册,和歌曲的选择,暂停,播放和重新开始。主要用到的页面跳转,事件的定义等方法。
二.代码及注释
<TextView
android:id="@+id/text1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:text="音频播放器"
android:textSize="40sp"/>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_marginTop="30sp"
android:layout_gravity="center">
<ImageButton
android:id="@+id/Stop"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:src="@drawable/music_stop" />
<ImageButton
android:id="@+id/Start"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layout_marginLeft="20sp"
android:src="@drawable/music_play" />
<ImageButton
android:id="@+id/Pause"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layout_marginLeft="20sp"
android:src="@drawable/music_pause" />
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginTop="30sp"
android:orientation="vertical">
<RadioGroup
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<RadioButton
android:id="@+id/r1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="歌曲a"
android:textSize="25dp"/>
<RadioButton
android:id="@+id/r2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="歌曲b"
android:textSize="25dp"/>
<RadioButton
android:id="@+id/r3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="歌曲c"
android:textSize="25dp"/>
</RadioGroup>
</LinearLayout>
<TextView
android:id="@+id/news_item_content_text_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="100dp"
android:layout_marginTop="200dp"
android:text="登录成功"
android:textSize="50dp" />
package com.example.exam;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.content.Intent;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.app.Activity;
import android.media.MediaPlayer;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ImageButton;
import android.widget.RadioButton;
import android.widget.TextView;
import com.example.exam.R;
public class MainActivity extends AppCompatActivity {
RadioButton r1, r2, r3;
TextView txt;
ImageButton mStopButton, mStartButton, mPauseButton;
MediaPlayer mMediaPlayer;
int res_file1 = R.raw.a;
int res_file2 = R.raw.b;
int res_file3 = R.raw.c;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TextView userName = findViewById(R.id.userName);
TextView Password = findViewById(R.id.passwd);
Button btn_register = findViewById(R.id.btn_register);
Button btn_login = findViewById(R.id.btnLogin);
r1 = (RadioButton) findViewById(R.id.r1);
r2 = (RadioButton) findViewById(R.id.r2);
r3 = (RadioButton) findViewById(R.id.r3);
txt = (TextView) findViewById(R.id.text1);
mStopButton = (ImageButton) findViewById(R.id.Stop);
mStartButton = (ImageButton) findViewById(R.id.Start);
mPauseButton = (ImageButton) findViewById(R.id.Pause);
mStopButton.setOnClickListener(new mStopClick());
mStartButton.setOnClickListener(new mStartClick());
mPauseButton.setOnClickListener(new mPauseClick());
String username = getIntent().getStringExtra("username");
String password = getIntent().getStringExtra("psw");
userName.setText(username);
Password.setText(password);
//注册控件的点击事件
btn_register.setOnClickListener( new View.OnClickListener() {
@Override
public void onClick(View v) {
//为了跳转到注册界面,并实现注册功能
Intent intent=new Intent(MainActivity.this,RegisterActivity.class);
startActivity(intent);
}
});
//登录按钮的点击事件
btn_login.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent=new Intent(MainActivity.this,LoginActivity.class);
startActivity(intent);
}
});
}
class mStopClick implements OnClickListener {
@Override
public void onClick(View v) {
/* 是否正在播放 */
if (mMediaPlayer.isPlaying()) {
//重置MediaPlayer到初始状态
mMediaPlayer.reset();
}
}
}
/* 播放按钮事件 */
class mStartClick implements OnClickListener {
@Override
public void onClick(View v) {
if (r1.isChecked()) {
if (mMediaPlayer.isPlaying()) {
//重置MediaPlayer到初始状态
mMediaPlayer.reset();
mMediaPlayer.release();
}
try {
mMediaPlayer = MediaPlayer.create(MainActivity.this, res_file1);
mMediaPlayer.start();
} catch (Exception e) {
Log.i("ch1", "res err ....");
}
}
if (r2.isChecked()) {
if (mMediaPlayer.isPlaying()) {
//重置MediaPlayer到初始状态
mMediaPlayer.reset();
mMediaPlayer.release();
}
try {
mMediaPlayer = MediaPlayer.create(MainActivity.this, res_file2);
mMediaPlayer.start();
} catch (Exception e) {
Log.i("ch1", "res err ....");
}
}
if (r3.isChecked()) {
if (mMediaPlayer.isPlaying()) {
//重置MediaPlayer到初始状态
mMediaPlayer.reset();
mMediaPlayer.release();
}
try {
mMediaPlayer = MediaPlayer.create(MainActivity.this, res_file3);
mMediaPlayer.start();
} catch (Exception e) {
Log.i("ch1", "res err ....");
}
}
}
}
/* 暂停按钮事件 */
class mPauseClick implements OnClickListener {
@Override
public void onClick(View v) {
if (mMediaPlayer.isPlaying()) {
/* 暂停 */
mMediaPlayer.pause();
} else {
/* 开始播放 */
mMediaPlayer.start();
}
}
}
}
<?xml version="1.0" encoding="utf-8"?><TextView
android:id="@+id/lable"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity=""
android:text="登录"
android:layout_marginTop="200px"
android:layout_marginLeft="20dp"
android:textSize="40sp"
android:textColor="#5767de"
></TextView>
<EditText
android:id="@+id/userName"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:layout_marginLeft="20dp"
android:hint="请输入你的用户名"/>
<EditText
android:id="@+id/passwd"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginTop="18dp"
android:layout_marginLeft="20dp"
android:hint="请输入你的密码"/>
<Button
android:id="@+id/btnLogin"
android:layout_width="fill_parent"
android:layout_height="40dp"
android:layout_gravity="center_horizontal"
android:layout_marginLeft="35dp"
android:layout_marginRight="35dp"
android:layout_marginTop="15dp"
android:text="登 录"
android:textColor="@android:color/holo_blue_dark"
android:textSize="18sp"/>
<Button
android:id="@+id/btn_register"
android:layout_width="fill_parent"
android:layout_height="40dp"
android:layout_gravity="center_horizontal"
android:layout_marginLeft="35dp"
android:layout_marginRight="35dp"
android:layout_marginTop="15dp"
android:text="注 册"
android:textColor="@android:color/holo_blue_dark"
android:textSize="18sp"/>
package com.example.exam;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import com.example.exam.R;
public class LoginActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
}
}
<?xml version="1.0" encoding="utf-8"?><EditText
android:id="@+id/userName"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginTop="48dp"
android:layout_marginLeft="40dp"
android:hint="请输入你的用户名"/>
<EditText
android:id="@+id/passwd"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginTop="48dp"
android:layout_marginLeft="40dp"
android:hint="请输入你的密码"/>
<EditText
android:id="@+id/passwd2"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginTop="48dp"
android:layout_marginLeft="40dp"
android:hint="确认密码"/>
<Button
android:id="@+id/btn_register"
android:layout_width="fill_parent"
android:layout_height="40dp"
android:layout_gravity="center_horizontal"
android:layout_marginLeft="35dp"
android:layout_marginRight="35dp"
android:layout_marginTop="15dp"
android:text="注 册"
android:textColor="@android:color/holo_blue_dark"
android:textSize="18sp"/>
<Button
android:id="@+id/to_login"
android:layout_width="fill_parent"
android:layout_height="40dp"
android:layout_gravity="center_horizontal"
android:layout_marginLeft="35dp"
android:layout_marginRight="35dp"
android:layout_marginTop="15dp"
android:text="返回登录"
android:textColor="@android:color/holo_blue_dark"
android:textSize="18sp"/>
package com.example.exam;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.content.Intent;
import android.content.SharedPreferences;
import android.text.TextUtils;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import com.example.exam.R;
public class RegisterActivity extends AppCompatActivity {
Button btn_register;//注册按钮
Button to_login; //返回按钮
EditText user_name,psw1,psw2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_register);
init();
}
private void init() {
btn_register=findViewById(R.id.btn_register);
to_login=findViewById(R.id.to_login);
user_name=findViewById(R.id.userName);
psw1=findViewById(R.id.passwd);
psw2=findViewById(R.id.passwd2);
//返回按钮
to_login.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//为了跳转到登录界面
Intent intent=new Intent(RegisterActivity.this,MainActivity.class);
startActivity(intent);
}
});
//注册按钮
btn_register.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent=new Intent(RegisterActivity.this,MainActivity.class);
intent.putExtra("username",user_name.getText().toString());
intent.putExtra("psw",psw1.getText().toString());
startActivity(intent);
}
});
}
}
三.运行界面
四.项目总结
在这次项目中我遇到了很多问题,做出如下总结。首先是R的标红,我在更改程序的时候用文本文件将代码复制了一份,当代码出问题,我将之前的代码复制上去时发现R被标红了,在我查阅大量资料发现,R标红是因为复制代码上去软件没有将其编译,这时将代码重新手打上去就行。其次我还在运行的过程中出现代码没有问题但是在手机的模拟器上面运行失败,这个问题解决就需要我们换一个新的模拟器有时这样就可以解决问题。接着就是对于页面跳转问题需要特别注意的就是不要忘记设置初始页面,不然在多页面的app中会造成程序出现问题。即在AndroidManifest.xml中将自己选取的初始页面标记。最后最重要的就是写代码时注意规范,将相同类型的事件放在一起,为文件取名最好符合功能。