Android开发简易音乐播放器

Android开发简易音乐播放器,第1张

概述Android开发简易音乐播放器 这里介绍一个简易的音乐播放器,供大家参考,具体内容如下 效果图如下: 但是,由于这是一个简易版的音乐播放器,所播放的音乐只有一首,且被写死,但, *** 作却十分简单,方便理解! 这是代码的主要设计: 音乐主要存放在这一个文件中: 下面就来介绍各部分代码: activity-main.xml: <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="ht ...

这里介绍一个简易的音乐播放器,供大家参考,具体内容如下

效果图如下:


但是,由于这是一个简易版的音乐播放器,所播放的音乐只有一首,且被写死,但, *** 作却十分简单,方便理解!

这是代码的主要设计:

音乐主要存放在这一个文件中:


下面就来介绍各部分代码:

activity—main。xml:

<?xml version="1.0" enCoding="utf-8"?><relativeLayout xmlns:androID="http://schemas.androID.com/apk/res/androID" xmlns:tools="http://schemas.androID.com/tools" androID:ID="@+ID/activity_main" androID:layout_wIDth="match_parent" androID:layout_height="match_parent" androID:background="#696969"> <linearLayout androID:layout_wIDth="match_parent" androID:layout_height="60dp" androID:layout_margintop="10dp" androID:layout_alignParenttop="true" androID:ID="@+ID/Title" androID:orIEntation="horizontal"> <TextVIEw  androID:layout_wIDth="match_parent"  androID:layout_height="wrap_content"  androID:layout_margintop="15dp"  androID:layout_marginBottom="3dp"  androID:text="生僻字"  androID:textSize="25dp"  androID:gravity="center"  androID:textcolor="#ffffff"/> </linearLayout> <TextVIEw androID:layout_wIDth="match_parent" androID:layout_height="0.5dp" androID:background="#afafaf" androID:layout_below="@+ID/Title"/> <ImageVIEw androID:ID="@+ID/disc" androID:layout_wIDth="280dp" androID:layout_height="280dp" androID:layout_centerHorizontal="true" androID:layout_below="@+ID/Title" androID:layout_margintop="50dp" androID:src="@drawable/xcvb" /> <ImageVIEw androID:ID="@+ID/needle" androID:layout_wIDth="120dp" androID:layout_height="120dp" androID:layout_below="@+ID/Title" androID:layout_marginleft="150dp"/> <relativeLayout androID:ID="@+ID/music1" androID:layout_wIDth="match_parent" androID:layout_height="wrap_content" androID:layout_above="@+ID/rl" androID:layout_margintop="20dp" androID:layout_marginBottom="10dp" androID:gravity="center"> <Seekbar  androID:ID="@+ID/music_seek_bar"  androID:layout_wIDth="240dp"  androID:layout_height="wrap_content"/> <TextSwitcher  androID:ID="@+ID/text_switcher"  androID:layout_wIDth="80dp"  androID:layout_height="50dp"  androID:layout_toRightOf="@+ID/music_seek_bar">  <TextVIEw  androID:layout_wIDth="match_parent"  androID:layout_height="wrap_content"  androID:text="00:00/2:00"  androID:textcolor="@color/colorAccent"/> </TextSwitcher> </relativeLayout> <linearLayout androID:layout_wIDth="match_parent" androID:layout_height="70dp" androID:gravity="center" androID:ID="@+ID/rl" androID:layout_marginBottom="20dp" androID:layout_alignParentBottom="true" androID:orIEntation="horizontal"> <ImageVIEw  androID:ID="@+ID/playing_pre"  androID:layout_wIDth="wrap_content"  androID:layout_height="wrap_content"  androID:layout_gravity="center_vertical"  androID:src="@drawable/music_prevIoUs" /> <ImageVIEw  androID:ID="@+ID/playing_play"  androID:layout_wIDth="wrap_content"  androID:layout_height="wrap_content"  androID:layout_gravity="center_vertical"  androID:src="@drawable/music_play" /> <ImageVIEw  androID:ID="@+ID/playing_next"  androID:layout_wIDth="wrap_content"  androID:layout_height="wrap_content"  androID:layout_gravity="center_vertical"  androID:src="@drawable/music_next" /> </linearLayout></relativeLayout>

main。activity部分:

package com.example.cungu.musicdemo;import androID.animation.ObjectAnimator;import androID.animation.ValueAnimator;import androID.content.Componentname;import androID.content.Intent;import androID.content.ServiceConnection;import androID.graphics.Bitmap;import androID.graphics.color;import androID.os.Build;import androID.os.IBinder;import androID.support.v7.app.AppCompatActivity;import androID.os.Bundle;import androID.vIEw.VIEw;import androID.vIEw.Window;import androID.vIEw.WindowManager;import androID.vIEw.animation.linearInterpolator;import androID.Widget.button;import androID.Widget.ImageVIEw;import androID.Widget.Seekbar;import androID.Widget.TextSwitcher;import java.text.SimpleDateFormat;import java.util.Date;public class MainActivity extends AppCompatActivity implements VIEw.OnClickListener,Runnable,ServiceConnection,Seekbar.OnSeekbarchangelistener { private ImageVIEw disc,needle,playingPre,playingPlay,playingNext; private ObjectAnimator discAnimation,needleAnimation;//自定义指针和唱盘 private boolean isPlaying = true;//0,1 判断是否处于播放状态 //声明服务 private static final String TAG = MainActivity.class.getSimplename(); private MediaService.MusicController mMusicController; //使用方法:mMusicController.play();播放 mMusicController.pause();暂停 private boolean running; private TextSwitcher mSwitcher; private Seekbar mSeekbar; @OverrIDe protected voID onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentVIEw(R.layout.activity_main); //设置透明栏 if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LolliPOP) {  Window window = getwindow();  window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS   | WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);  window.getDecorVIEw().setsystemUIVisibility(   VIEw.SYstem_UI_FLAG_LAYOUT_FulLSCREEN    | VIEw.SYstem_UI_FLAG_LAYOUT_Stable  );  window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYstem_bar_BACKGROUNDS);  window.setStatusbarcolor(color.transparent); } //滑动条部分 mSeekbar = (Seekbar) findVIEwByID(R.ID.music_seek_bar); mSeekbar.setonSeekbarchangelistener(this); mSwitcher = (TextSwitcher) findVIEwByID(R.ID.text_switcher); mSwitcher.setInAnimation(this,androID.R.anim.fade_in); mSwitcher.setoutAnimation(this,androID.R.anim.fade_out); Intent intent = new Intent(this,MediaService.class); //增加StartService,来增加后台播放功能 startService(intent); // 绑定服务,使用context来绑定 // 那个界面需要绑定 就用哪个 Activity // 参数1:Intent  代表需要绑定哪一个Service // 参数2:ServiceConnection 回调接口,可以接收到Service连接成功和断开的回调,成功就可以取到对象。 // 绑定服务 参数2就是服务和指定的对象绑定在一起 bindService(intent,this,BIND_auto_CREATE); //指针和唱片部分 initVIEws();//定义背景图 setAnimations(); } private voID initVIEws() { playingPre = (ImageVIEw) findVIEwByID(R.ID.playing_pre); playingPlay = (ImageVIEw) findVIEwByID(R.ID.playing_play); playingNext = (ImageVIEw) findVIEwByID(R.ID.playing_next); disc = (ImageVIEw) findVIEwByID(R.ID.disc); needle = (ImageVIEw) findVIEwByID(R.ID.needle); playingPre.setonClickListener(this); playingPlay.setonClickListener(this); playingNext.setonClickListener(this); } //动画设置 private voID setAnimations() { discAnimation = ObjectAnimator.offloat(disc,"rotation",360); discAnimation.setDuration(20000); discAnimation.setInterpolator(new linearInterpolator()); discAnimation.setRepeatCount(ValueAnimator.INFINITE); needleAnimation = ObjectAnimator.offloat(needle,25); needle.setPivotX(0); needle.setPivotY(0); needleAnimation.setDuration(800); needleAnimation.setInterpolator(new linearInterpolator()); } @OverrIDe public voID onClick(VIEw v) { int ID = v.getID(); switch (ID) {  case R.ID.playing_pre://前一曲  if (discAnimation != null) {   discAnimation.end();   playing();  }  break;  case R.ID.playing_play://播放中  if (isPlaying){   playing();  }else {   if (needleAnimation != null) {   needleAnimation.reverse();   needleAnimation.end();   mMusicController.pause();   }   if (discAnimation != null && discAnimation.isRunning()) {   discAnimation.cancel();   mMusicController.pause();   float valueAvatar = (float) discAnimation.getAnimatedValue();   discAnimation.setfloatValues(valueAvatar,360f + valueAvatar);   }   playingPlay.setimageResource(R.drawable.music_play);   isPlaying = true;  }  break;  case R.ID.playing_next://下一曲  if (discAnimation != null) {   discAnimation.end();   playing();  }  break;  default:  break; } } //播放:1、播放音乐 2、动画旋转 3、暂停图片切换为播放按钮图片 private voID playing(){ needleAnimation.start(); discAnimation.start(); playingPlay.setimageResource(R.drawable.music_pause); mMusicController.play();//播放 isPlaying = false; }//===================================播放歌曲服务开启、停止、结束=============================== @OverrIDe protected voID onStart() { super.onStart(); Thread thread = new Thread(this); thread.start(); } @OverrIDe protected voID onStop() { running = false; super.onStop(); } @OverrIDe protected voID onDestroy() { // 解除绑定 unbindService(this); super.onDestroy(); } //---------------------播放到当前音乐的滑动条及时间设置-------------------------- @OverrIDe public voID run() { running = true; try {  while (running) {  if (mMusicController != null) {   long musicDuration = mMusicController.getMusicDuration();   final long position = mMusicController.getposition();   final Date datetotal = new Date(musicDuration);   final SimpleDateFormat sb = new SimpleDateFormat("mm:ss");   mSeekbar.setMax((int) musicDuration);   mSeekbar.setProgress((int) position);   mSwitcher.post(    new Runnable() {    @OverrIDe    public voID run() {     Date date = new Date(position);     String time = sb.format(date) + "/" + sb.format(datetotal);     mSwitcher.setCurrentText(time);    }    }   );  }  Thread.sleep(500);  } } catch (InterruptedException e) {  e.printstacktrace(); } } //----------------------------- //服务绑定与解除绑定的回调 /** * 当服务与当前绑定对象,绑定成功,服务onBind方法调用并且返回之后 * 回调给这个方法 * * @param name * @param service IBinder 就是服务 onBind 返回的对象 */ @OverrIDe public voID onServiceConnected(Componentname name,IBinder service) { mMusicController = ((MediaService.MusicController) service); } @OverrIDe public voID onServicedisconnected(Componentname name) { mMusicController = null; } public voID btnStopService(VIEw vIEw) { Intent intent = new Intent(this,MediaService.class); stopService(intent); } @OverrIDe public voID onProgressChanged(Seekbar seekbar,int progress,boolean fromUser) { } @OverrIDe public voID onStartTrackingtouch(Seekbar seekbar) { } @OverrIDe public voID onStopTrackingtouch(Seekbar seekbar) { mMusicController.setposition(seekbar.getProgress()); }}

mediaserver部分的代码:

package com.example.cungu.musicdemo;import androID.app.Service;import androID.content.Intent;import androID.media.MediaPlayer;import androID.os.Binder;import androID.os.Environment;import androID.os.IBinder;public class MediaService extends Service { private MediaPlayer mPlayer; /* 绑定服务的实现流程: * 1.服务 onCreate, onBind, onDestroy 方法 * 2.onBind 方法需要返回一个 IBinder 对象 * 3.如果 Activity 绑定,Activity 就可以取到 IBinder 对象,可以直接调用对象的方法 */ // 相同应用内部不同组件绑定,可以使用内部类以及Binder对象来返回。 public class MusicController extends Binder { public voID play() {  mPlayer.start();//开启音乐 } public voID pause() {  mPlayer.pause();//暂停音乐 } public long getMusicDuration() {  return mPlayer.getDuration();//获取文件的总长度 } public long getposition() {  return mPlayer.getCurrentposition();//获取当前播放进度 } public voID setposition (int position) {  mPlayer.seekTo(position);//重新设定播放进度 } } /** * 当绑定服务的时候,自动回调这个方法 * 返回的对象可以直接 *** 作Service内部的内容 * @param intent * @return */ @OverrIDe public IBinder onBind(Intent intent) { return new MusicController(); } @OverrIDe public voID onCreate() { super.onCreate(); mPlayer = MediaPlayer.create(this,R.raw.yinyue1); } /** * 任意一次unbindService()方法,都会触发这个方法 * 用于释放一些绑定时使用的资源 * @param intent * @return */ @OverrIDe public boolean onUnbind(Intent intent) { return super.onUnbind(intent); } @OverrIDe public voID onDestroy() { if (mPlayer.isPlaying()) {  mPlayer.stop(); } mPlayer.release(); mPlayer = null; super.onDestroy(); }}

到此,这一个简易的音乐播放器,就完成了。

但是一个音乐播放器,至少播放的音乐不会只有一首,所以,可以考虑试做一个本地音乐播放器,读取本地的音乐!

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

总结

以上是内存溢出为你收集整理的Android开发简易音乐播放器全部内容,希望文章能够帮你解决Android开发简易音乐播放器所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1144238.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-31
下一篇 2022-05-31

发表评论

登录后才能评论

评论列表(0条)

保存