Android Studio实现简易音乐播放器(期末作业)

项目演示(视频中会出现黑屏是手机录像输入密码时防止密码泄露而导致的,并不是程序问题)

video02

登录注册代码和页面在上一篇文章,地址为:http://t.csdnimg.cn/sgdba

在res目录下新建一个文件夹raw,然后自己将准备好的音频文件复制粘贴到raw文件夹下

activity_music.xml布局文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:background="@drawable/shape_background"
    >


    <LinearLayout
        android:gravity="center"
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <androidx.cardview.widget.CardView
            android:layout_width="300dp"
            android:layout_height="300dp"
            app:cardCornerRadius="200sp"
            android:backgroundTint="#000"
            android:layout_marginBottom="100dp"
            >

            <androidx.cardview.widget.CardView
                android:layout_width="200dp"
                android:layout_height="200dp"
                android:layout_gravity="center"
                app:cardCornerRadius="100dp"
                app:cardElevation="0dp"
                >

                <ImageView
                    android:id="@+id/img"
                    android:layout_width="200dp"
                    android:layout_height="200dp"
                    android:src="@drawable/j1"
                    android:scaleType="fitXY"
                    />


            </androidx.cardview.widget.CardView>

        </androidx.cardview.widget.CardView>


       <!-- <androidx.cardview.widget.CardView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="80dp"
            android:layout_marginBottom="12dp"
            android:layout_gravity="center"
            app:cardCornerRadius="100dp"
            app:cardElevation="0dp"
            >

            <ImageView
                android:id="@+id/img"
                android:layout_width="200dp"
                android:layout_height="190dp"
                android:src="@drawable/j1"
                android:scaleType="fitXY"
                />


        </androidx.cardview.widget.CardView>-->
        <RelativeLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content">
            <!--       当前时长 -->
            <TextView
                android:id="@+id/tv_starttime"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentStart="true"
                android:text="@string/time"
                android:textColor="@color/white"
                />
            <!--        进度条-->
            <SeekBar
                android:id="@+id/seekbar"
                android:layout_centerHorizontal="true"
                android:layout_width="320dp"
                android:layout_marginStart="40dp"
                android:layout_height="wrap_content"
                android:progressTint="@color/white"
                />
            <!--        总的时长-->
            <TextView
                android:id="@+id/tv_alltime"
                android:textColor="@color/white"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentEnd="true"
                android:text="@string/time"
                />

        </RelativeLayout>

        <RelativeLayout
            android:layout_marginTop="50dp"
            android:layout_gravity="center"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content">

            <ImageView
                android:id="@+id/img_before"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginEnd="100dp"
                android:src="@drawable/vedio_houtui"
                />

            <ImageView
                android:id="@+id/img_start"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginStart="80dp"
                android:src="@drawable/vedio_zanting"
                />
            <ImageView
                android:id="@+id/img_end"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginLeft="80dp"
                android:src="@drawable/video_kaishi"
                android:visibility="gone"
                />

            <ImageView
                android:id="@+id/img_after"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginStart="160dp"
                android:src="@drawable/vedio_qianjin"
                />

        </RelativeLayout>

    </LinearLayout>

</LinearLayout>

实现代码MusciActivity.java 代码上都有注解解释代码,不懂的自行查阅

import android.media.MediaPlayer;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.view.animation.LinearInterpolator;
import android.view.animation.RotateAnimation;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.SeekBar;
import android.widget.TextView;
import android.widget.Toast;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;


import java.io.IOException;

public class MusicActivity extends AppCompatActivity implements View.OnClickListener {

    private static final int VOICE_RECOGNITION_REQUEST_CODE = 100;
    private ImageView img;
    private ImageView img_start;
    private ImageView img_after;
    private ImageView img_before;
    private ImageView img_end;
    private LinearLayout layout;
    private RotateAnimation rotateAnimation = null;
    private LinearInterpolator linearInterpolator = null;
    private MediaPlayer player;
    private TextView tv_alltime;
    private TextView tv_starttime;
    private android.widget.SeekBar seekbar;
    private final int updata = 1;
    private Handler handler;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        setStatusColor(R.color.transparent);
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_music);

        initView();
        try {
            InitAndio();
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
        seekbar.setProgress(0);
        setMusicData();
        ViewClick();

    }

    private void setMusicData() {
        // 设置进度条的监听
        seekbar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
            // 进度条改变时调用
            @Override
            public void onProgressChanged(SeekBar seekBar, int i, boolean b) {
                if (!player.isPlaying()) {
                    player.seekTo(seekbar.getProgress());
                    tv_starttime.setText(new Vedio().JinDuTime(seekbar.getProgress() / 1000));
                }
            }

            // 开始拉动进度条时调用
            @Override
            public void onStartTrackingTouch(SeekBar seekBar) {
                handler.removeMessages(updata);
                //player.stop();
                player.pause();
            }

            // 停止拉动进度条时调用
            @Override
            public void onStopTrackingTouch(SeekBar seekBar) {
                handler.sendEmptyMessage(updata);
                player.start();
            }
        });

        handler = new Handler(new Handler.Callback() {
            @Override
            public boolean handleMessage(@NonNull Message message) {
                switch (message.what) {
                    case updata: {
                        // 设置进度条的最大值
                        seekbar.setMax(player.getDuration());
                        // 设置当前进度条长度(即监听得到的时间)
                        seekbar.setProgress(player.getCurrentPosition());
                        // 设置当前音乐播放的位置
                        tv_starttime.setText(new Vedio().JinDuTime(player.getCurrentPosition() / 1000));
                        // 每隔1000毫秒刷新一次进度条的值
                        handler.sendEmptyMessageDelayed(updata, 1000);
                    }
                }
                return true;
            }
        });
    }

    /**
     * 设置状态栏颜色
     */
    public void setStatusColor(int color) {
        if (Build.VERSION.SDK_INT >= 21) {
            View view = MusicActivity.this.getWindow().getDecorView();
            view.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
            MusicActivity.this.getWindow().setStatusBarColor(MusicActivity.this.getResources().getColor(color));
        }
    }

    /**
     * 初始化控件
     */
    public void initView() {
        img_start = findViewById(R.id.img_start);
        img_after = findViewById(R.id.img_after);
        img_before = findViewById(R.id.img_before);
        img_end = findViewById(R.id.img_end);
        layout = findViewById(R.id.layout);
        tv_alltime = findViewById(R.id.tv_alltime);
        tv_starttime = findViewById(R.id.tv_starttime);
        seekbar = findViewById(R.id.seekbar);

    }

    /**
     * 控件点击事件
     */
    public void ViewClick() {
        img_start.setOnClickListener(this);
        img_before.setOnClickListener(this);
        img_after.setOnClickListener(this);
        img_end.setOnClickListener(this);
    }

    /**
     * 初始化音频数据
     */
    public void InitAndio() throws IOException {
        player = new MediaPlayer();
        // 获取音频文件
        player = MediaPlayer.create(getApplicationContext(), R.raw.music01);
        // 获取音频的总时间
        int time = player.getDuration() / 1000;
        tv_alltime.setText(new Vedio().JinDuTime(time));

    }

    @Override
    public void onClick(View view) {
        if (view.getId() == R.id.img_start) { // 开始播放按钮
            // 点击开始播放按钮并隐藏,img_end显示
            img_start.setVisibility(View.GONE);
            img_end.setVisibility(View.VISIBLE);
            // 开始音乐播放
            player.start();
            // 添加监听
            handler.sendEmptyMessage(updata);
        } else if (view.getId() == R.id.img_after) {
            Toast.makeText(this, "下一曲", Toast.LENGTH_SHORT).show();
        } else if (view.getId() == R.id.img_before) {
            Toast.makeText(this, "上一曲", Toast.LENGTH_SHORT).show();
        } else if (view.getId() == R.id.img_end) {
            // 暂停音乐播放
            player.pause();
            // 点击暂停按钮并隐藏,img_start显示
            img_end.setVisibility(View.GONE);
            img_start.setVisibility(View.VISIBLE);
            // 移除监听
            handler.removeMessages(updata);
        }
    }
}

时间换算工具类 Video.java

import java.io.Serializable;

public class Vedio {
    public String JinDuTime(int time){
        int miao=time%60;
        int fen=time/60;
        int shi=time/60/60;
        Serializable getfen = fen < 10 ? 0 + "" + fen : fen;
        Serializable getmiao = miao < 10 ? 0 + "" + miao : miao;
        return getfen+":"+getmiao;
    }
}

至此简易音乐播放器就已完成了,更多功能待你扩展,代码只是提供参考,希望你能从中获取有用的技术价值

  • 26
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
### 回答1: 制作简易音乐播放器需要了解 Android 开发基础知识,包括 Android 控件、音频播放 API 等。步骤如下: 1. 创建 Android Studio 项目 2. 在布局文件中添加音乐播放所需的控件,如播放/暂停按钮、进度条等 3. 使用 MediaPlayer 类播放音乐文件 4. 通过代码实现播放/暂停、快进/快退等功能 5. 运行并测试音乐播放器。 请注意,上述步骤仅是大致流程,详细实现需要更多代码实现。如果您对 Android 开发知识不熟悉,可以参考一些教程或视频。 ### 回答2: Android Studio是开发Android应用程序的主要开发工具。在使用Android Studio时,我们可以很方便地开发一个简易音乐播放器应用程序,下面就来简单介绍一下。 首先,我们需要使用MediaPlayer类来实现基本的音乐播放功能。MediaPlayer类提供各种方法,如start()、pause()、stop()和release()等,以控制音乐播放。我们需要在我们的应用程序中创建一个MediaPlayer对象,然后在适当的时候调用这些方法。 其次,我们需要添加用户界面组件来控制音乐播放。常用的用户界面组件包括Button、SeekBar和TextView等。Button用于播放、暂停和停止音乐,SeekBar用于控制音乐的播放进度,而TextView用于显示歌曲名称、歌手和专辑信息等。 接着,我们需要读取音频文件。我们可以在res/raw文件夹中添加音频文件,然后使用MediaPlayer的setDataSource()方法。我们可以从MediaPlayer对象中获得其持有的音频文件的信息,并将其显示在TextView上。 最后,我们需要处理用户的输入操作。通过设置Button的点击事件,我们可以实现播放、暂停和停止音乐的功能。通过SeekBar的拖动事件,我们可以实现控制音乐播放进度的功能。这些操作会触发相应的MediaPlayer方法调用,从而完成音乐播放器应用程序的开发。 因为Android Studio提供了许多便捷的工具和模板,开发一个简易音乐播放器应用程序并不需要过多的技术难度。只要了解Android开发基础知识,掌握好Java语言,再加上一定的耐心和实践,相信开发一个高质量的音乐播放器应用程序并不是难事。 ### 回答3: Android Studio是全球开发人员使用最为广泛的安卓开发工具之一,而开发一款简易音乐播放器也可以展现出学习Android开发的重要性。下面将从以下几个方面讲解如何使用Android Studio实现一个简易音乐播放器。 1.主页面设计 在主页面设计中,我们可以先添加一个背景图片,然后在页面上添加一个RecyclerView来展示音乐列表,再添加一个FloatingActionButton作为播放按钮。这样的设计可以让用户快速找到自己想要播放的音乐,通过FloatingActionButton可以让用户一键播放音乐。 2.音乐加载与展示 在音乐加载和展示中,我们可以将音乐列表存入一个List集合中,通过RecyclerView进行展示,此外在适配器中还需设置每个Item的点击事件,当用户点击某一项音乐时,就需要实现音乐播放功能。 3.音乐播放 在音乐播放中需要用到MediaPlayer类,它可以实现音乐的播放、暂停、停止等基本功能。在实现播放功能时需要先获得音乐文件的路径,通过MediaPlayer的create()方法创建一个MediaPlayer对象,并调用start()方法开始播放音乐,同时也需要添加监听器来检测播放完成事件。在暂停与播放状态之间的转换需要用到setOnCompletionListener()方法,这个方法会在音乐播放完成时调用,判断音乐播放状态并进行相应的操作。 4.其他功能 除了基本的音乐播放功能,还可以在音乐播放器中添加音量调节、歌词显示、定时停止等扩展功能,这些功能可以让音乐播放器更加实用和人性化。 总之,通过学习Android Studio,我们可以轻松开发出一款简易音乐播放器,为自己的Android开发之路打下坚实的基础。同时,也要注意在实际开发中遵循规范和良好的编码习惯,写出高效、可维护、健壮的代码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值