大大福利站网站建设广东手机网站制作价格

news/2025/10/2 1:56:12/文章来源:
大大福利站网站建设,广东手机网站制作价格,百润网站建设,网站建设及管理工作岗位要求目录 一、引言 视频效果展示#xff1a; 1.启动页效果 2.登录页效果 3.注册页效果 4.歌曲列表页效果 5.播放页效果 二、详细设计 1.登陆注册功能 2.音乐列表页面 2.音乐播放功能 三、源码获取 一、引言 Android初学者开发第一个完整的实例项目应该就属《音乐播放器…目录 一、引言 视频效果展示 1.启动页效果 2.登录页效果 3.注册页效果 4.歌曲列表页效果 5.播放页效果 二、详细设计 1.登陆注册功能 2.音乐列表页面 2.音乐播放功能 三、源码获取 一、引言 Android初学者开发第一个完整的实例项目应该就属《音乐播放器》了项目包含SQLlit数据库的使用、listview、Fragment、等。话不多说先上成品 视频效果展示 Android Studio 音乐播放器 图片效果展示 1.启动页效果 2.登录页效果 3.注册页效果 4.歌曲列表页效果 5.播放页效果 二、详细设计 1.登陆注册功能 用户进行注册数据使用SQLite存储用户登录时根据数据库的内容来核对用户名和密码是否正确。 Login.xml代码 ?xml version1.0 encodingutf-8? androidx.constraintlayout.widget.ConstraintLayout xmlns:androidhttp://schemas.android.com/apk/res/androidxmlns:apphttp://schemas.android.com/apk/res-autoxmlns:toolshttp://schemas.android.com/toolsandroid:layout_widthmatch_parentandroid:layout_heightmatch_parentandroid:background#f9d7e7tools:context.Login.LoginActivityImageViewandroid:idid/imageView3android:layout_width200dpandroid:layout_height150dpandroid:layout_marginTop24dpapp:layout_constraintEnd_toEndOfparentapp:layout_constraintStart_toStartOfparentapp:layout_constraintTop_toTopOfparentapp:srcCompatdrawable/logo1 /Viewandroid:idid/view2android:layout_width0dpandroid:layout_height320dpandroid:layout_marginTop24dpandroid:backgrounddrawable/login_viewapp:layout_constraintEnd_toStartOfid/guideline2app:layout_constraintStart_toStartOfid/guideline3app:layout_constraintTop_toBottomOfid/imageView3 /Buttonandroid:idid/login_buttonandroid:layout_width250dpandroid:layout_height55dpandroid:layout_marginBottom32dpandroid:backgrounddrawable/loginandroid:text立 即 登 录 android:textColor#fffandroid:textSize24spapp:layout_constraintBottom_toBottomOfid/view2app:layout_constraintEnd_toStartOfid/guideline2app:layout_constraintStart_toStartOfid/view2 /androidx.constraintlayout.widget.Guidelineandroid:idid/guideline2android:layout_widthwrap_contentandroid:layout_heightwrap_contentandroid:orientationverticalapp:layout_constraintGuide_percent0.9 /androidx.constraintlayout.widget.Guidelineandroid:idid/guideline3android:layout_widthwrap_contentandroid:layout_heightwrap_contentandroid:orientationverticalapp:layout_constraintGuide_percent0.1 /Viewandroid:idid/view3android:layout_width0dpandroid:layout_height45dpandroid:layout_marginTop40dpandroid:backgrounddrawable/login_countapp:layout_constraintEnd_toEndOfid/login_buttonapp:layout_constraintStart_toStartOfid/login_buttonapp:layout_constraintTop_toTopOfid/view2 /Viewandroid:idid/view4android:layout_width0dpandroid:layout_height45dpandroid:layout_marginTop24dpandroid:backgrounddrawable/login_countapp:layout_constraintEnd_toEndOfid/login_buttonapp:layout_constraintHorizontal_bias0.0app:layout_constraintStart_toStartOfid/login_buttonapp:layout_constraintTop_toBottomOfid/view3 /TextViewandroid:idid/textViewandroid:layout_widthwrap_contentandroid:layout_heightwrap_contentandroid:layout_marginTop24dpandroid:text忘 记 密 码app:layout_constraintStart_toStartOfid/view4app:layout_constraintTop_toBottomOfid/view4 /TextViewandroid:idid/login_registerandroid:layout_widthwrap_contentandroid:layout_heightwrap_contentandroid:text立 即 注 册app:layout_constraintBottom_toBottomOfid/textViewapp:layout_constraintEnd_toEndOfid/view4app:layout_constraintTop_toTopOfid/textView /ImageViewandroid:idid/imageViewandroid:layout_width20dpandroid:layout_height20dpapp:layout_constraintBottom_toBottomOfid/view4app:layout_constraintEnd_toEndOfid/imageView4app:layout_constraintTop_toTopOfid/view4app:srcCompatdrawable/mima /ImageViewandroid:idid/imageView4android:layout_width20dpandroid:layout_height20dpandroid:layout_marginStart16dpapp:layout_constraintBottom_toBottomOfid/view3app:layout_constraintStart_toStartOfid/view3app:layout_constraintTop_toTopOfid/view3app:srcCompatdrawable/zhanghao /Viewandroid:idid/view5android:layout_width100dpandroid:layout_height1dpandroid:layout_marginTop40dpandroid:background#fffapp:layout_constraintStart_toStartOfid/guideline3app:layout_constraintTop_toBottomOfid/view2 /Viewandroid:idid/view6android:layout_width100dpandroid:layout_height1dpandroid:background#fffapp:layout_constraintEnd_toStartOfid/guideline2app:layout_constraintTop_toTopOfid/view5 /TextViewandroid:idid/textView3android:layout_widthwrap_contentandroid:layout_heightwrap_contentandroid:text其它方式登陆android:textColor#fffapp:layout_constraintBottom_toBottomOfid/view5app:layout_constraintEnd_toStartOfid/view6app:layout_constraintStart_toEndOfid/view5app:layout_constraintTop_toTopOfid/view5 /ImageViewandroid:idid/imageView6android:layout_width30dpandroid:layout_height30dpapp:layout_constraintBottom_toBottomOfid/imageView5app:layout_constraintEnd_toStartOfid/imageView7app:layout_constraintStart_toEndOfid/imageView5app:layout_constraintTop_toTopOfid/imageView5app:srcCompatdrawable/qq /ImageViewandroid:idid/imageView5android:layout_width30dpandroid:layout_height30dpandroid:layout_marginStart70dpandroid:layout_marginTop24dpapp:layout_constraintStart_toStartOfid/guideline3app:layout_constraintTop_toBottomOfid/view5app:srcCompatdrawable/weixin /ImageViewandroid:idid/imageView7android:layout_width30dpandroid:layout_height30dpandroid:layout_marginEnd70dpapp:layout_constraintBottom_toBottomOfid/imageView6app:layout_constraintEnd_toStartOfid/guideline2app:layout_constraintTop_toTopOfid/imageView6app:srcCompatdrawable/weibo /EditTextandroid:idid/userandroid:layout_width190dpandroid:layout_height0dpandroid:layout_marginStart5dpandroid:ems10android:background#eff4f2android:inputTypetextPersonNameandroid:hint请输入账号app:layout_constraintBottom_toBottomOfid/view3app:layout_constraintStart_toEndOfid/imageView4app:layout_constraintTop_toTopOfid/view3 /EditTextandroid:idid/passandroid:layout_width190dpandroid:layout_height0dpandroid:layout_marginStart5dpandroid:ems10android:background#eff4f2android:inputTypetextPasswordandroid:hint请输入密码app:layout_constraintBottom_toBottomOfid/view4app:layout_constraintStart_toEndOfid/imageViewapp:layout_constraintTop_toTopOfid/view4app:layout_constraintVertical_bias0.0 //androidx.constraintlayout.widget.ConstraintLayout Register.xml代码 ?xml version1.0 encodingutf-8? androidx.constraintlayout.widget.ConstraintLayout xmlns:androidhttp://schemas.android.com/apk/res/androidxmlns:apphttp://schemas.android.com/apk/res-autoxmlns:toolshttp://schemas.android.com/toolsandroid:layout_widthmatch_parentandroid:layout_heightmatch_parentandroid:background#f9d7e7tools:context.Register.RegisterActivityImageViewandroid:idid/imageView3android:layout_width200dpandroid:layout_height150dpandroid:layout_marginTop40dpapp:layout_constraintEnd_toEndOfparentapp:layout_constraintStart_toStartOfparentapp:layout_constraintTop_toTopOfparentapp:srcCompatdrawable/logo1 /Viewandroid:idid/view2android:layout_width0dpandroid:layout_height270dpandroid:backgrounddrawable/login_viewapp:layout_constraintBottom_toBottomOfparentapp:layout_constraintEnd_toStartOfid/guideline4app:layout_constraintHorizontal_bias0.0app:layout_constraintStart_toStartOfid/guidelineapp:layout_constraintTop_toTopOfid/imageView3app:layout_constraintVertical_bias0.501 /Viewandroid:idid/view3android:layout_width250dpandroid:layout_height45dpandroid:layout_marginTop32dpandroid:backgrounddrawable/login_countapp:layout_constraintEnd_toStartOfid/guideline4app:layout_constraintStart_toStartOfid/view2app:layout_constraintTop_toTopOfid/view2 /Viewandroid:idid/view4android:layout_width0dpandroid:layout_height45dpandroid:layout_marginTop32dpandroid:backgrounddrawable/login_countapp:layout_constraintEnd_toEndOfid/view3app:layout_constraintStart_toStartOfid/view3app:layout_constraintTop_toBottomOfid/view3 /androidx.constraintlayout.widget.Guidelineandroid:idid/guidelineandroid:layout_widthwrap_contentandroid:layout_heightwrap_contentandroid:orientationverticalapp:layout_constraintGuide_percent0.1 /androidx.constraintlayout.widget.Guidelineandroid:idid/guideline4android:layout_widthwrap_contentandroid:layout_heightwrap_contentandroid:orientationverticalapp:layout_constraintGuide_percent0.9 /ImageViewandroid:idid/imageViewandroid:layout_width20dpandroid:layout_height20dpandroid:layout_marginStart8dpapp:layout_constraintBottom_toBottomOfid/view3app:layout_constraintStart_toStartOfid/view3app:layout_constraintTop_toTopOfid/view3app:srcCompatdrawable/mima /ImageViewandroid:idid/imageView4android:layout_width20dpandroid:layout_height20dpapp:layout_constraintBottom_toBottomOfid/view4app:layout_constraintStart_toStartOfid/imageViewapp:layout_constraintTop_toTopOfid/view4app:srcCompatdrawable/zhanghao /Buttonandroid:idid/register_buttonandroid:layout_width250dpandroid:layout_height55dpandroid:text立 即 注 册android:layout_marginBottom32dpandroid:backgrounddrawable/loginapp:layout_constraintBottom_toBottomOfid/view2app:layout_constraintEnd_toEndOfid/view2app:layout_constraintHorizontal_bias0.497app:layout_constraintStart_toStartOfid/view2 /EditTextandroid:idid/username_edittextandroid:layout_width190dpandroid:layout_height0dpandroid:layout_marginStart5dpandroid:ems10android:hint请输入账号android:background#eff4f2android:inputTypetextPersonNameapp:layout_constraintBottom_toBottomOfid/view3app:layout_constraintStart_toEndOfid/imageViewapp:layout_constraintTop_toTopOfid/view3 /EditTextandroid:idid/password_edittextandroid:layout_width190dpandroid:layout_height0dpandroid:layout_marginStart5dpandroid:ems10android:hint请输入密码android:background#eff4f2android:inputTypetextPasswordapp:layout_constraintBottom_toBottomOfid/view4app:layout_constraintStart_toEndOfid/imageView4app:layout_constraintTop_toTopOfid/view4 //androidx.constraintlayout.widget.ConstraintLayout LoginActivity完整代码 package com.example.music.Login;import android.content.Intent; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; import android.widget.Toast;import androidx.appcompat.app.AppCompatActivity;import com.example.music.MainActivity; import com.example.music.R; import com.example.music.Register.RegisterActivity; import com.example.music.Data.DatabaseHelper;public class LoginActivity extends AppCompatActivity {private TextView loginRegister;private EditText user;private EditText pass;private Button mLoginButton;private DatabaseHelper mDatabaseHelper;Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_login);user findViewById(R.id.user);pass findViewById(R.id.pass);mLoginButton findViewById(R.id.login_button);loginRegister findViewById(R.id.login_register);mDatabaseHelper new DatabaseHelper(this);loginRegister.setOnClickListener(new View.OnClickListener() {Overridepublic void onClick(View v) {Intent intent new Intent(LoginActivity.this, RegisterActivity.class);startActivity(intent);}});mLoginButton.setOnClickListener(new View.OnClickListener() {Overridepublic void onClick(View v) {String username user.getText().toString().trim();String password pass.getText().toString().trim();if (username.isEmpty() || password.isEmpty()) {Toast.makeText(getApplicationContext(), 请输入账号或密码, Toast.LENGTH_SHORT).show();return;}boolean result mDatabaseHelper.checkUser(username, password);if (result) {Toast.makeText(getApplicationContext(), 登陆成功, Toast.LENGTH_SHORT).show();Intent intent new Intent(LoginActivity.this, MainActivity.class);startActivity(intent);} else {Toast.makeText(getApplicationContext(), 账号或密码错误, Toast.LENGTH_SHORT).show();}}});} } RegisterActivity完整代码 package com.example.music.Register;import androidx.appcompat.app.AppCompatActivity;import android.content.Intent; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.Toast;import com.example.music.Login.LoginActivity; import com.example.music.R; import com.example.music.Data.DatabaseHelper;public class RegisterActivity extends AppCompatActivity {private EditText mUserNameEditText;private EditText mPasswordEditText;private Button registerButton;private DatabaseHelper mDatabaseHelper;Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_register);mUserNameEditText findViewById(R.id.username_edittext);mPasswordEditText findViewById(R.id.password_edittext);registerButton findViewById(R.id.register_button);mDatabaseHelper new DatabaseHelper(this);registerButton.setOnClickListener(new View.OnClickListener() {Overridepublic void onClick(View v) {String username mUserNameEditText.getText().toString().trim();String password mPasswordEditText.getText().toString().trim();if (username.isEmpty() || password.isEmpty()) {Toast.makeText(getApplicationContext(), 请输入账号或密码, Toast.LENGTH_SHORT).show();return;}boolean result mDatabaseHelper.insertData(username, password);if (result) {Toast.makeText(getApplicationContext(), 注册成功, Toast.LENGTH_SHORT).show();Intent intent new Intent(RegisterActivity.this, LoginActivity.class);startActivity(intent);finish();} else {Toast.makeText(getApplicationContext(), 注册失败, Toast.LENGTH_SHORT).show();}}});} } 2.音乐列表页面 主要用于音乐的显示以及点击对应的音乐跳转到对应的音乐播放页面。 Activity完整代码 package com.example.music;import android.content.Intent; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.ListView; import android.widget.TextView;import androidx.fragment.app.Fragment;import com.example.music.Music.MusicActivity;public class SongPage extends Fragment {//声明视图变量viewprivate View view;//在这里添加歌曲名public String[] songname {Innocence, 刚刚好,不用去猜};private String[] name{A R L,薛之谦,Jony J};//在这里添加歌曲图片public static int[] icons {R.drawable.img_01, R.drawable.img_02, R.drawable.img_03};Overridepublic View onCreateView(final LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {view inflater.inflate(R.layout.music_list, null);//1、创建并绑定列表ListView listView view.findViewById(R.id.lv);//2、创建适配器对象MyBaseAdapter adapter new MyBaseAdapter();//3、给列表设置适配器listView.setAdapter(adapter);//设置列表条目监听器listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {Overridepublic void onItemClick(AdapterView? parent, View view, int position, long id) {//创建Intent对象启动音乐播放界面Intent intent new Intent(SongPage.this.getContext(), MusicActivity.class);//将数据存入Intent对象利用键值对intent.putExtra(name, name[position]);intent.putExtra(songname, songname[position]);intent.putExtra(position, String.valueOf(position));//开启意图进行跳转startActivity(intent);}});return view;}class MyBaseAdapter extends BaseAdapter {Overridepublic int getCount() {return name.length;}Overridepublic Object getItem(int i) {return name[i];}Overridepublic long getItemId(int i) {return i;}Overridepublic View getView(int i, View convertView, ViewGroup parent) {//绑定视图并且显示歌曲名和歌曲图片View view View.inflate(SongPage.this.getContext(), R.layout.item_music, null);TextView songName view.findViewById(R.id.song_name);ImageView songPic view.findViewById(R.id.song_pic);TextView name1view.findViewById(R.id.name);songName.setText(songname[i]);name1.setText(name[i]);songPic.setImageResource(icons[i]);return view;}}}相关的xml代码 ?xml version1.0 encodingutf-8? androidx.constraintlayout.widget.ConstraintLayout xmlns:androidhttp://schemas.android.com/apk/res/androidxmlns:apphttp://schemas.android.com/apk/res-autoxmlns:toolshttp://schemas.android.com/toolsandroid:layout_widthmatch_parentandroid:layout_heightwrap_contentandroid:padding15dpImageViewandroid:idid/song_picandroid:layout_width86dpandroid:layout_height86dpandroid:srcdrawable/img_01app:layout_constraintStart_toStartOfparentapp:layout_constraintTop_toTopOfparent /TextViewandroid:idid/song_nameandroid:layout_widthwrap_contentandroid:layout_heightwrap_contentandroid:layout_marginStart8dpandroid:layout_marginTop16dpandroid:text歌曲android:textColor#000android:textSize20spapp:layout_constraintStart_toEndOfid/song_picapp:layout_constraintTop_toTopOfid/song_pic /TextViewandroid:idid/nameandroid:layout_widthwrap_contentandroid:layout_heightwrap_contentandroid:layout_marginTop8dpandroid:text歌曲android:textColor#000android:textSize14spapp:layout_constraintStart_toStartOfid/song_nameapp:layout_constraintTop_toBottomOfid/song_name /ImageViewandroid:idid/song_enterandroid:layout_width30dpandroid:layout_height30dpandroid:layout_marginEnd8dpandroid:srcdrawable/song_playapp:layout_constraintBottom_toBottomOfid/song_picapp:layout_constraintEnd_toEndOfparentapp:layout_constraintTop_toTopOfid/song_pic //androidx.constraintlayout.widget.ConstraintLayout 2.音乐播放功能 用于播放音乐对音乐进行暂停上一首、下一首功能的实现。 具体MusicActivity代码 public class MusicActivity extends AppCompatActivity implements View.OnClickListener{//定义歌曲名称的数组public String[] musicName{Innocence, 刚刚好,不用去猜};private static SeekBar sb;//定义进度条private static TextView tv_progress, tv_total, name_song;//定义开始和总时长,歌曲名控件private ObjectAnimator animator;//定义旋转的动画private MusicService.MusicControl musicControl;//音乐控制类private Button play; //播放按钮private Button pause; //暂停按钮private Button con; //继续播放按钮private Button pre; //上一首按钮private Button next; //下一首按钮private ImageView exit; //退出按钮private ImageView iv_music; //歌手图片框Intent intent1, intent2; //定义两个意图MyServiceConn conn; //服务连接private boolean isUnbind false;//记录服务是否被解绑public int change 0; //记录下标的变化值Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_music);//去除标题栏ActionBar actionBar getSupportActionBar();if(actionBar! null){actionBar.hide();}//获得意图intent1 getIntent();//初始化initView();}//初始化private void initView(){//依次绑定控件tv_progress findViewById(R.id.tv_progress);tv_total findViewById(R.id.tv_total);sb findViewById(R.id.sb);name_song findViewById(R.id.song_name);iv_music findViewById(R.id.iv_music);play findViewById(R.id.btn_play);pause findViewById(R.id.btn_pause);con findViewById(R.id.btn_continue_play);pre findViewById(R.id.btn_pre);next findViewById(R.id.btn_next);exit findViewById(R.id.btn_exit);//依次设置监听器play.setOnClickListener(this);pause.setOnClickListener(this);con.setOnClickListener(this);pre.setOnClickListener(this);next.setOnClickListener(this);exit.setOnClickListener(this);//创建意图对象intent2 new Intent(this, MusicService.class);conn new MyServiceConn();//创建服务连接对象bindService(intent2, conn,BIND_AUTO_CREATE);//绑定服务//从歌曲列表传过来的歌曲名String name intent1.getStringExtra(songname);//设置歌曲名显示name_song.setText(name);//定义歌曲列表传过来的下标positionString position intent1.getStringExtra(position);//将字符串转化为整型iint i parseInt(position);//图像框设置为frag1里面的图标数组下标为iiv_music.setImageResource(SongPage.icons[i]);//为滑动条添加事件监听sb.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {RequiresApi(api Build.VERSION_CODES.KITKAT)Overridepublic void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {//当滑动条到末端时将message对象发送出去if (progress sb.getMax()){}}Overridepublic void onStartTrackingTouch(SeekBar seekBar) {//滑动条开始滑动时调用}Overridepublic void onStopTrackingTouch(SeekBar seekBar) {//滑动条停止滑动时调用//根据拖动的进度改变音乐播放进度int progress seekBar.getProgress();//获取seekBar的进度musicControl.seekTo(progress);//改变播放进度}});animator ObjectAnimator.ofFloat(iv_music,rotation,0f,360.0f);animator.setDuration(10000);//动画旋转一周的时间为10秒animator.setInterpolator(new LinearInterpolator());//匀速animator.setRepeatCount(-1);//-1表示设置动画无限循环}//歌曲进度条的消息机制public static Handler handler new Handler(){//创建消息处理器对象//在主线程中处理从子线程发送过来的消息Overridepublic void handleMessage(Message msg){Bundle bundle msg.getData();//获取从子线程发送过来的音乐播放进度int duration bundle.getInt(duration);int currentPosition bundle.getInt(currentPosition);sb.setMax(duration);sb.setProgress(currentPosition);//歌曲总时长单位为毫秒int minute duration/1000/60;int second duration/1000%60;String strMinute null;String strSecond null;if(minute 10){//如果歌曲的时间中的分钟小于10strMinute 0 minute;//在分钟的前面加一个0}else{strMinute minute ;}if (second 10){//如果歌曲中的秒钟小于10strSecond 0 second;//在秒钟前面加一个0}else{strSecond second ;}tv_total.setText(strMinute : strSecond);//歌曲当前播放时长minute currentPosition/1000/60;second currentPosition/1000%60;if(minute 10){//如果歌曲的时间中的分钟小于10strMinute 0 minute;//在分钟的前面加一个0}else{strMinuteminute ;}if (second 10){//如果歌曲中的秒钟小于10strSecond 0 second;//在秒钟前面加一个0}else{strSecond second ;}tv_progress.setText(strMinute : strSecond);}};//用于实现连接服务class MyServiceConn implements ServiceConnection {Overridepublic void onServiceConnected(ComponentName name, IBinder service){musicControl(MusicService.MusicControl) service;}Overridepublic void onServiceDisconnected(ComponentName name){}}//未解绑则解绑private void unbind(boolean isUnbind){if(!isUnbind){//判断服务是否被解绑musicControl.pausePlay();//暂停播放音乐unbindService(conn);//解绑服务}}RequiresApi(api Build.VERSION_CODES.KITKAT)Overridepublic void onClick(View v) {//获取歌曲名的下标字符串String index intent1.getStringExtra(position);//将字符串转为整数int i parseInt(index);switch (v.getId()){case R.id.btn_play://播放按钮点击事件play.setVisibility(View.INVISIBLE);musicControl.play(i);animator.start();break;//这里musicName.length-1表示的最后一首歌的下标即歌曲总数-1case R.id.btn_pre://播放上一首if((i change) 1) {change musicName.length - 1 - i;iv_music.setImageResource(SongPage.icons[i change]);name_song.setText(musicName[i change]);musicControl.play(i change);pause.setVisibility(View.VISIBLE);animator.start();break;} else {change--;iv_music.setImageResource(SongPage.icons[i change]);name_song.setText(musicName[i change]);musicControl.play(i change);pause.setVisibility(View.VISIBLE);animator.start();break;}case R.id.btn_next://播放下一首if((i change) musicName.length - 1) {change -i;iv_music.setImageResource(SongPage.icons[i change]);name_song.setText(musicName[i change]);musicControl.play(i change);pause.setVisibility(View.VISIBLE);animator.start();break;} else {change;iv_music.setImageResource(SongPage.icons[i change]);name_song.setText(musicName[i change]);musicControl.play(i change);pause.setVisibility(View.VISIBLE);animator.start();break;}case R.id.btn_pause://暂停按钮点击事件pause.setVisibility(View.INVISIBLE);con.setVisibility(View.VISIBLE);musicControl.pausePlay();animator.pause();break;case R.id.btn_continue_play://继续播放按钮点击事件con.setVisibility(View.INVISIBLE);pause.setVisibility(View.VISIBLE);musicControl.continuePlay();animator.start();break;case R.id.btn_exit://退出按钮点击事件unbind(isUnbind);isUnbind true;finish();break;}}Overrideprotected void onDestroy(){super.onDestroy();unbind(isUnbind);//解绑服务} } 相关的xml文件代码 ?xml version1.0 encodingutf-8? androidx.constraintlayout.widget.ConstraintLayout xmlns:androidhttp://schemas.android.com/apk/res/androidxmlns:apphttp://schemas.android.com/apk/res-autoxmlns:toolshttp://schemas.android.com/toolsandroid:layout_widthmatch_parentandroid:layout_heightmatch_parentandroid:background#f9d7e7android:orientationverticaltools:context.Music.MusicActivityImageViewandroid:idid/btn_exitandroid:layout_width20dpandroid:layout_height20dpandroid:layout_marginStart16dpandroid:layout_marginTop24dpapp:layout_constraintStart_toStartOfparentapp:layout_constraintTop_toTopOfparentapp:srcCompatdrawable/back /TextViewandroid:idid/song_nameandroid:layout_widthwrap_contentandroid:layout_heightwrap_contentandroid:layout_gravitycenterandroid:text光年之外android:textColor#000android:textSize24spapp:layout_constraintBottom_toBottomOfid/btn_exitapp:layout_constraintEnd_toEndOfparentapp:layout_constraintStart_toStartOfparentapp:layout_constraintTop_toTopOfid/btn_exit /ImageViewandroid:idid/iv_musicandroid:layout_width250dpandroid:layout_height250dpandroid:layout_marginTop80dpandroid:srcdrawable/img_01app:layout_constraintEnd_toEndOfparentapp:layout_constraintStart_toStartOfparentapp:layout_constraintTop_toBottomOfid/btn_exit /SeekBarandroid:idid/sbandroid:layout_width250dpandroid:layout_height20dpandroid:layout_marginTop80dpapp:layout_constraintEnd_toEndOfparentapp:layout_constraintStart_toStartOfparentapp:layout_constraintTop_toBottomOfid/iv_music /TextViewandroid:idid/tv_progressandroid:layout_widthwrap_contentandroid:layout_heightwrap_contentandroid:layout_marginEnd5dpandroid:text00:00app:layout_constraintBottom_toBottomOfid/sbapp:layout_constraintEnd_toStartOfid/sbapp:layout_constraintTop_toTopOfid/sb /TextViewandroid:idid/tv_totalandroid:layout_widthwrap_contentandroid:layout_heightwrap_contentandroid:layout_marginStart5dpandroid:text00:00app:layout_constraintBottom_toBottomOfid/sbapp:layout_constraintStart_toEndOfid/sbapp:layout_constraintTop_toTopOfid/sb /Buttonandroid:idid/btn_continue_playandroid:layout_width60dpandroid:layout_height60dpandroid:backgrounddrawable/playapp:layout_constraintBottom_toBottomOfid/btn_preapp:layout_constraintEnd_toStartOfid/btn_nextapp:layout_constraintStart_toEndOfid/btn_preapp:layout_constraintTop_toTopOfid/btn_pre /Buttonandroid:idid/btn_pauseandroid:layout_width60dpandroid:layout_height60dpandroid:backgrounddrawable/pauseapp:layout_constraintBottom_toBottomOfid/btn_nextapp:layout_constraintEnd_toStartOfid/btn_nextapp:layout_constraintStart_toEndOfid/btn_preapp:layout_constraintTop_toTopOfid/btn_next /Buttonandroid:idid/btn_preandroid:layout_width40dpandroid:layout_height40dpandroid:layout_marginStart24dpandroid:backgrounddrawable/preapp:layout_constraintBottom_toBottomOfid/btn_nextapp:layout_constraintStart_toStartOfid/tv_progressapp:layout_constraintTop_toTopOfid/btn_next /Buttonandroid:idid/btn_nextandroid:layout_width40dpandroid:layout_height40dpandroid:layout_marginTop100dpandroid:layout_marginEnd24dpandroid:backgrounddrawable/nextapp:layout_constraintEnd_toEndOfid/tv_totalapp:layout_constraintTop_toBottomOfid/tv_total /Buttonandroid:idid/btn_playandroid:layout_width60dpandroid:layout_height60dpandroid:backgrounddrawable/playapp:layout_constraintBottom_toBottomOfid/btn_preapp:layout_constraintEnd_toStartOfid/btn_nextapp:layout_constraintStart_toEndOfid/btn_preapp:layout_constraintTop_toTopOfid/btn_pre //androidx.constraintlayout.widget.ConstraintLayout 三、源码获取 ✨还可以关注我的公众号《编程乐学》菜单栏有很多优质的资料等你来学习。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/924485.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

丰台seo网站关键词优化自动seo系统

table中合并单元格导致的css样式不同处理方式:1.每行都拆成一个table。2.多设置几个单元格的宽度(自适应失效、第一列都设置宽度也有可能失效)。

php开源企业网站系统北京 设计 网站建设

Centos7系统 docker指定版本安装【官方文档步骤】 官方文档地址:https://docs.docker.com/engine/install/centos/ # 1.安装yum工具及设置docker-ce镜像库 sudo yum install -y yum-utils# 国外的镜像下载太慢了改成阿里云镜像库 sudo yum-config-manager --add-rep…

南昌市有帮做网站的吗wordpress+防爬虫

一、前言知道的越多不知道的就越多编程开发这条路上的知识是无穷无尽的,就像以前你敢说精通Java,到后来学到越来越多只想写了解Java,过了几年现在可能想说懂一点点Java。当视野和格局的扩大,会让我们越来越发现原来的看法是多么浅…

宏重钢结构东莞网站建设nodejs做静态网站

前端调用后端接口,本域情况下,ajax方式调用,request header中包含x-requested-with信息。跨域情况下,request header中不再包含x-requested-with。说明:1.前端ajax封装的jquery的$.ajax方法。2.后端header相关设置已允…

pc端网站建设网页制作公司的服务

目录 数据类型介绍 类型的基本归类 整形家族: 浮点数家族: 构造类型: 指针类型 空类型: 整形在内存中的存储 原码、反码、补码 大小端介绍 什么大端小端: 为什么有大端和小端: 练习 浮点型在内存中的储存 一个例子 浮点数存储规则 数据类型介绍 前面我们…

汕头东莞网站建设网站的建设任务

目标:认识代码规范 代码规范:一套写代码的约定规则。例如:“赋值符号的左右是否需要空格”,"一句结束是否是要加;”等 为什么要使用代码规范? 在团队开发时,提高代码的可读性。 在创建项目时,我们选择的就是一套完整的代码…

Codeforces 1385G Columns Swaps 题解 [ 蓝 ] [ 扩展域并查集 ] [ 二分图最大权匹配 ] [ 基环树建模 ]

Columns Swaps:经典的图论问题,典中典了。 首先判掉无解,如果有一个数没有出现两次,则一定无解。在此基础上我们也可以得出一个转化:只需要保证序列 \(a_1\) 是一个排列,那么 \(a_2\) 自然也是一个排列了。 Sol.…

做网站是不是要学编程三亚市城乡建设局网站

文章目录 前言Compose应用程序模型Compose规范顶层属性servicenetworkvolumesconfigssecrets 环境变量.env文件environment属性主机shell中的环境变量 Profiles(剖面)启动剖面自动启动剖面和依赖项解析 多compose.yml文件共享与扩展构建规范构建属性 部署…

兰溪自适应网站建设特点传奇手游官网下载

(3)在 pipeline.py 文件中对数据进行存储,此程序先写 入 txt 文件中,是为了判断该程序是否能正确爬取出数据。 此处使用了 json 库,使用 ensure_ascii False,能够确 保非 ASCII 字符(如中文&am…

html5电影网站建设php网站开发电子书

背景: 接上一篇文章,ProcessWindowFunction 结合自定义触发器会有状态过大的问题,本文就使用AggregateFunction结合自定义触发器来实现,这样就不会导致状态过大的问题了 AggregateFunction结合自定义触发器实现 flink对于每个窗…

网站开发二级域名深圳企业专业网站设计

spring-boot 一款无侵入型,轻量级的接口文档生成工具apiggs 名字叫:apiggs 使用只需两步,先把插件代码引入pom文件,然后编译打包即可 之后项目的target目录下,就会多出一个apiggs的文件夹,里面便是项目cont…

vps网站设置wordpress代码高亮插件

一.属性计算、属性监听、属性过滤 1.认识MVVM V (用户视图界面)通过VM (应用程序) 向Model(数据模型) 取值与赋值的过程! 数据双向绑定 视图改变更新数据,数据改变更新视图 2.属性计算 //在vue实例中通过computed去计算new …

US$78 HU66 Clamp SN-CP-JJ-12 Work on Volkswagen Serials for SEC-E9 Key Cutting Machine

HU66 Clamp SN-CP-JJ-12 Work on Volkswagen Serials for SEC-E9 Key Cutting Machine HU66 Auxiliary fixture is suitable to copy keys for Sharon, Touareg, Phaeton, Beetle and other Volkswagen series, as wel…

US$78 HU64 Clamp Work on Benz SN-CP-JJ-11 for SEC-E9 Key Cutting Machine

SEC E9 HU64 Clamp for Benz SN-CP-JJ-11Benz serials for class C,E and GLK ,Sprinter,Viano, Vito and all new Benz improted cars (including Maybach,Lorinser and Carlsson,class in S and GL,out milling and …

杭州家具网站建设方案网站开发PHP程序员招聘

Java中主要有八种基本数据类型: 1、整型:byte、short、int、long 2、字符型:char 3、浮点型:float、double 4、布尔型:boolean 一、整型 Java中整型数据属于有符号数,即第一个bit位为0表示正整数&…

PlantUML 完整教程:从入门到精通

什么是 PlantUML PlantUML 是一个开源工具,允许用户使用简单直观的文本描述来快速创建 UML 图表。它基于纯文本语法,能够生成多种类型的图表,包括时序图、用例图、类图、活动图、组件图、状态图等。 PlantUML 的核心…

长治长治那有做网站的小程序定制开发公司平台

目录 Shell: 3.Shell命令: command [-options] arg1 arg2 .. 1.Shell基本命令: 2.文件查看命令: 3.文件查找命令: 通配符: 7.压缩解压命令: 8.让虚拟机上网: 9.apt-get工具集: Shell: 1.保护Linux内核(用户和Linux内核不直接操作,通过操作Shell,Shell和内核交互) 2.命令…

建设法规的网站网站开发者技术网站

数据结构分为逻辑结构和物理结构。 逻辑结构:指数据元素之间逻辑关系的数据结构,这里的逻辑关系是指数据元素之间的前后间关系,与数据在计算机中的存储位置无关。物理结构:指数据的逻辑结构在计算机存储空间中的存放形式称为数据…

你妈的

为什么结构图论这么难为什么结构图论这么难为什么结构图论这么难为什么结构图论这么难为什么结构图论这么难为什么结构图论这么难为什么结构图论这么难为什么结构图论这么难为什么结构图论这么难为什么结构图论这么难为…

网上书城网站开发意义网站和搜索引擎

解析class文件案例介绍本案例主要介绍通过java代码从class文件中解析;class文件、常量池、属性表;作为类(或者接口)信息的载体,每个class文件都完整地定义了一个类。为了使java程序可以“编写一次,处处运行”,Java虚拟…