1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > Android应用开发--MP3音乐播放器代码实现(二)

Android应用开发--MP3音乐播放器代码实现(二)

时间:2022-08-20 00:00:36

相关推荐

Android应用开发--MP3音乐播放器代码实现(二)

5月25日 简、美音乐播放器开发

小巫在这里罗列这个播放器已经实现的功能:

1.自动显示音乐列表

2.点击列表播放音乐

3.长按列表弹出对话框

4.暂停音乐

5.上一首音乐

6.下一首音乐

7.自动播放下一首歌曲

8.单曲循环

9.全部循环

10. 随机播放

以上所有功能将会分为两篇博文来讲解,首先是主界面的,接着是播放界面的。在这里要说明一点,以上功能是小巫自己一点一点调试才实现的,并不能完全排除考虑不周的地方,原本这个软件实现起来并不太难,但确实要考虑到很多细节的地方,播放状态的切换和控制就是一块,也花了我不少实现,之前还很苦恼实现自己想要的效果,但后来还是经过思考和调试把功能实现。所以说,开发是一个需要很耐心的过程,各位童鞋,如果真正喜欢编程的话,想要做出一些小作品的话,那就好好掂量自己的耐心吧,好了,废话不多说,先贴一大段代码,后面在慢慢把需要注意的地方说一下。

主界面效果图:

以上界面的效果怎么实现的?

很简单的,就是ListView的数据填充,但要填的的东西就要考虑了,怎么把数据从SQLite中获取,小巫封装了一个工具类,用来获取与MP3相关的数据。

==>MediaUtils

[java]view plaincopy packagecom.wwj.sb.utils;importjava.util.ArrayList;importjava.util.HashMap;importjava.util.Iterator;importjava.util.List;importandroid.content.Context;importandroid.database.Cursor;importandroid.provider.MediaStore;importcom.wwj.sb.domain.Mp3Info;publicclassMediaUtil{/***用于从数据库中查询歌曲的信息,保存在List当中**@return*/publicstaticList<Mp3Info>getMp3Infos(Contextcontext){Cursorcursor=context.getContentResolver().query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,null,null,null,MediaStore.Audio.Media.DEFAULT_SORT_ORDER);List<Mp3Info>mp3Infos=newArrayList<Mp3Info>();for(inti=0;i<cursor.getCount();i++){cursor.moveToNext();Mp3Infomp3Info=newMp3Info();longid=cursor.getLong(cursor.getColumnIndex(MediaStore.Audio.Media._ID));//音乐idStringtitle=cursor.getString((cursor.getColumnIndex(MediaStore.Audio.Media.TITLE)));//音乐标题Stringartist=cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.ARTIST));//艺术家longduration=cursor.getLong(cursor.getColumnIndex(MediaStore.Audio.Media.DURATION));//时长longsize=cursor.getLong(cursor.getColumnIndex(MediaStore.Audio.Media.SIZE));//文件大小Stringurl=cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.DATA));//文件路径intisMusic=cursor.getInt(cursor.getColumnIndex(MediaStore.Audio.Media.IS_MUSIC));//是否为音乐if(isMusic!=0){//只把音乐添加到集合当中mp3Info.setId(id);mp3Info.setTitle(title);mp3Info.setArtist(artist);mp3Info.setDuration(duration);mp3Info.setSize(size);mp3Info.setUrl(url);mp3Infos.add(mp3Info);}}returnmp3Infos;}/***往List集合中添加Map对象数据,每一个Map对象存放一首音乐的所有属性*@parammp3Infos*@return*/publicstaticList<HashMap<String,String>>getMusicMaps(List<Mp3Info>mp3Infos){List<HashMap<String,String>>mp3list=newArrayList<HashMap<String,String>>();for(Iteratoriterator=mp3Infos.iterator();iterator.hasNext();){Mp3Infomp3Info=(Mp3Info)iterator.next();HashMap<String,String>map=newHashMap<String,String>();map.put("title",mp3Info.getTitle());map.put("Artist",mp3Info.getArtist());map.put("duration",formatTime(mp3Info.getDuration()));map.put("size",String.valueOf(mp3Info.getSize()));map.put("url",mp3Info.getUrl());mp3list.add(map);}returnmp3list;}/***格式化时间,将毫秒转换为分:秒格式*@paramtime*@return*/publicstaticStringformatTime(longtime){Stringmin=time/(1000*60)+"";Stringsec=time%(1000*60)+"";if(min.length()<2){min="0"+time/(1000*60)+"";}else{min=time/(1000*60)+"";}if(sec.length()==4){sec="0"+(time%(1000*60))+"";}elseif(sec.length()==3){sec="00"+(time%(1000*60))+"";}elseif(sec.length()==2){sec="000"+(time%(1000*60))+"";}elseif(sec.length()==1){sec="0000"+(time%(1000*60))+"";}returnmin+":"+sec.trim().substring(0,2);}}

好吧,来重头戏了,一大段代码来袭。

HomeActivity.Java

[java]view plaincopy packagecom.wwj.sb.activity;importjava.util.HashMap;importjava.util.List;importandroid.app.Activity;importandroid.app.AlertDialog;importandroid.app.Service;importandroid.content.BroadcastReceiver;importandroid.content.Context;importandroid.content.DialogInterface;importandroid.content.Intent;importandroid.content.IntentFilter;importandroid.graphics.Color;importandroid.os.Bundle;importandroid.os.Vibrator;importandroid.view.ContextMenu;importandroid.view.ContextMenu.ContextMenuInfo;importandroid.view.KeyEvent;importandroid.view.View;importandroid.view.View.OnClickListener;importandroid.view.View.OnCreateContextMenuListener;importandroid.view.ViewGroup.LayoutParams;importandroid.widget.AdapterView;importandroid.widget.AdapterView.OnItemClickListener;importandroid.widget.ArrayAdapter;importandroid.widget.Button;importandroid.widget.ImageView;importandroid.widget.ListView;importandroid.widget.SimpleAdapter;importandroid.widget.TextView;importandroid.widget.Toast;importcom.wwj.sb.domain.AppConstant;importcom.wwj.sb.domain.Mp3Info;importcom.wwj.sb.service.PlayerService;importcom.wwj.sb.utils.ConstantUtil;importcom.wwj.sb.utils.CustomDialog;importcom.wwj.sb.utils.MediaUtil;/***/5/7*简、美音乐播放器*@authorwwj**/publicclassHomeActivityextendsActivity{privateListViewmMusiclist;//音乐列表privateList<Mp3Info>mp3Infos=null;privateSimpleAdaptermAdapter;//简单适配器privateButtonpreviousBtn;//上一首privateButtonrepeatBtn;//重复(单曲循环、全部循环)privateButtonplayBtn;//播放(播放、暂停)privateButtonshuffleBtn;//随机播放privateButtonnextBtn;//下一首privateTextViewmusicTitle;//歌曲标题privateTextViewmusicDuration;//歌曲时间privateButtonmusicPlaying;//歌曲专辑privateintrepeatState;//循环标识privatefinalintisCurrentRepeat=1;//单曲循环privatefinalintisAllRepeat=2;//全部循环privatefinalintisNoneRepeat=3;//无重复播放privatebooleanisFirstTime=true;privatebooleanisPlaying;//正在播放privatebooleanisPause;//暂停privatebooleanisNoneShuffle=true;//顺序播放privatebooleanisShuffle=false;//随机播放privateintlistPosition=0;//标识列表位置privateHomeReceiverhomeReceiver;//自定义的广播接收器//一系列动作publicstaticfinalStringUPDATE_ACTION="com.wwj.action.UPDATE_ACTION";publicstaticfinalStringCTL_ACTION="com.wwj.action.CTL_ACTION";publicstaticfinalStringMUSIC_CURRENT="com.wwj.action.MUSIC_CURRENT";publicstaticfinalStringMUSIC_DURATION="com.wwj.action.MUSIC_DURATION";publicstaticfinalStringREPEAT_ACTION="com.wwj.action.REPEAT_ACTION";publicstaticfinalStringSHUFFLE_ACTION="com.wwj.action.SHUFFLE_ACTION";privateintcurrentTime;privateintduration;@OverridepublicvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.home_activity_layout);mMusiclist=(ListView)findViewById(R.id.music_list);mMusiclist.setOnItemClickListener(newMusicListItemClickListener());mMusiclist.setOnCreateContextMenuListener(newMusicListItemContextMenuListener());mp3Infos=MediaUtil.getMp3Infos(getApplicationContext());//获取歌曲对象集合setListAdpter(MediaUtil.getMusicMaps(mp3Infos));//显示歌曲列表findViewById();//找到界面上的每一个控件setViewOnclickListener();//为一些控件设置监听器repeatState=isNoneRepeat;//初始状态为无重复播放状态homeReceiver=newHomeReceiver();//创建IntentFilterIntentFilterfilter=newIntentFilter();//指定BroadcastReceiver监听的Actionfilter.addAction(UPDATE_ACTION);filter.addAction(MUSIC_CURRENT);filter.addAction(MUSIC_DURATION);filter.addAction(REPEAT_ACTION);filter.addAction(SHUFFLE_ACTION);//注册BroadcastReceiverregisterReceiver(homeReceiver,filter);}/***从界面上根据id获取按钮*/privatevoidfindViewById(){previousBtn=(Button)findViewById(R.id.previous_music);repeatBtn=(Button)findViewById(R.id.repeat_music);playBtn=(Button)findViewById(R.id.play_music);shuffleBtn=(Button)findViewById(R.id.shuffle_music);nextBtn=(Button)findViewById(R.id.next_music);musicTitle=(TextView)findViewById(R.id.music_title);musicDuration=(TextView)findViewById(R.id.music_duration);musicPlaying=(Button)findViewById(R.id.playing);}/***给每一个按钮设置监听器*/privatevoidsetViewOnclickListener(){ViewOnClickListenerviewOnClickListener=newViewOnClickListener();previousBtn.setOnClickListener(viewOnClickListener);repeatBtn.setOnClickListener(viewOnClickListener);playBtn.setOnClickListener(viewOnClickListener);shuffleBtn.setOnClickListener(viewOnClickListener);nextBtn.setOnClickListener(viewOnClickListener);musicPlaying.setOnClickListener(viewOnClickListener);}privateclassViewOnClickListenerimplementsOnClickListener{Intentintent=newIntent();@OverridepublicvoidonClick(Viewv){switch(v.getId()){caseR.id.previous_music://上一首playBtn.setBackgroundResource(R.drawable.play_selector);isFirstTime=false;isPlaying=true;isPause=false;previous();break;caseR.id.repeat_music://重复播放if(repeatState==isNoneRepeat){repeat_one();shuffleBtn.setClickable(false);repeatState=isCurrentRepeat;}elseif(repeatState==isCurrentRepeat){repeat_all();shuffleBtn.setClickable(false);repeatState=isAllRepeat;}elseif(repeatState==isAllRepeat){repeat_none();shuffleBtn.setClickable(true);repeatState=isNoneRepeat;}switch(repeatState){caseisCurrentRepeat://单曲循环repeatBtn.setBackgroundResource(R.drawable.repeat_current_selector);Toast.makeText(HomeActivity.this,R.string.repeat_current,Toast.LENGTH_SHORT).show();break;caseisAllRepeat://全部循环repeatBtn.setBackgroundResource(R.drawable.repeat_all_selector);Toast.makeText(HomeActivity.this,R.string.repeat_all,Toast.LENGTH_SHORT).show();break;caseisNoneRepeat://无重复repeatBtn.setBackgroundResource(R.drawable.repeat_none_selector);Toast.makeText(HomeActivity.this,R.string.repeat_none,Toast.LENGTH_SHORT).show();break;}break;caseR.id.play_music://播放音乐if(isFirstTime){play();isFirstTime=false;isPlaying=true;isPause=false;}else{if(isPlaying){playBtn.setBackgroundResource(R.drawable.pause_selector);intent.setAction("com.wwj.media.MUSIC_SERVICE");intent.putExtra("MSG",AppConstant.PlayerMsg.PAUSE_MSG);startService(intent);isPlaying=false;isPause=true;}elseif(isPause){playBtn.setBackgroundResource(R.drawable.play_selector);intent.setAction("com.wwj.media.MUSIC_SERVICE");intent.putExtra("MSG",AppConstant.PlayerMsg.CONTINUE_MSG);startService(intent);isPause=false;isPlaying=true;}}break;caseR.id.shuffle_music://随机播放if(isNoneShuffle){shuffleBtn.setBackgroundResource(R.drawable.shuffle_selector);Toast.makeText(HomeActivity.this,R.string.shuffle,Toast.LENGTH_SHORT).show();isNoneShuffle=false;isShuffle=true;shuffleMusic();repeatBtn.setClickable(false);}elseif(isShuffle){shuffleBtn.setBackgroundResource(R.drawable.shuffle_none_selector);Toast.makeText(HomeActivity.this,R.string.shuffle_none,Toast.LENGTH_SHORT).show();isShuffle=false;isNoneShuffle=true;repeatBtn.setClickable(true);}break;caseR.id.next_music://下一首playBtn.setBackgroundResource(R.drawable.play_selector);isFirstTime=false;isPlaying=true;isPause=false;next();break;caseR.id.playing://正在播放Mp3Infomp3Info=mp3Infos.get(listPosition);Intentintent=newIntent(HomeActivity.this,PlayerActivity.class);intent.putExtra("title",mp3Info.getTitle());intent.putExtra("url",mp3Info.getUrl());intent.putExtra("artist",mp3Info.getArtist());intent.putExtra("listPosition",listPosition);intent.putExtra("currentTime",currentTime);intent.putExtra("duration",duration);intent.putExtra("MSG",AppConstant.PlayerMsg.PLAYING_MSG);startActivity(intent);break;}}}privateclassMusicListItemClickListenerimplementsOnItemClickListener{/***点击列表播放音乐*/@OverridepublicvoidonItemClick(AdapterView<?>parent,Viewview,intposition,longid){listPosition=position;playMusic(listPosition);}}publicclassMusicListItemContextMenuListenerimplementsOnCreateContextMenuListener{@OverridepublicvoidonCreateContextMenu(ContextMenumenu,Viewv,ContextMenuInfomenuInfo){Vibratorvibrator=(Vibrator)getSystemService(Service.VIBRATOR_SERVICE);vibrator.vibrate(50);//长按振动musicListItemDialog();//长按后弹出的对话框}}/***填充列表**@parammp3Infos*/publicvoidsetListAdpter(List<HashMap<String,String>>mp3list){mAdapter=newSimpleAdapter(this,mp3list,R.layout.music_list_item_layout,newString[]{"title","Artist","duration"},newint[]{R.id.music_title,R.id.music_Artist,R.id.music_duration});mMusiclist.setAdapter(mAdapter);}/***下一首歌曲*/publicvoidnext(){listPosition=listPosition+1;if(listPosition<=mp3Infos.size()-1){Mp3Infomp3Info=mp3Infos.get(listPosition);musicTitle.setText(mp3Info.getTitle());Intentintent=newIntent();intent.setAction("com.wwj.media.MUSIC_SERVICE");intent.putExtra("listPosition",listPosition);intent.putExtra("url",mp3Info.getUrl());intent.putExtra("MSG",AppConstant.PlayerMsg.NEXT_MSG);startService(intent);}else{Toast.makeText(HomeActivity.this,"没有下一首了",Toast.LENGTH_SHORT).show();}}/***上一首歌曲*/publicvoidprevious(){listPosition=listPosition-1;if(listPosition>=0){Mp3Infomp3Info=mp3Infos.get(listPosition);musicTitle.setText(mp3Info.getTitle());Intentintent=newIntent();intent.setAction("com.wwj.media.MUSIC_SERVICE");intent.putExtra("listPosition",listPosition);intent.putExtra("url",mp3Info.getUrl());intent.putExtra("MSG",AppConstant.PlayerMsg.PRIVIOUS_MSG);startService(intent);}else{Toast.makeText(HomeActivity.this,"没有上一首了",Toast.LENGTH_SHORT).show();}}publicvoidplay(){playBtn.setBackgroundResource(R.drawable.play_selector);Mp3Infomp3Info=mp3Infos.get(listPosition);musicTitle.setText(mp3Info.getTitle());Intentintent=newIntent();intent.setAction("com.wwj.media.MUSIC_SERVICE");intent.putExtra("listPosition",0);intent.putExtra("url",mp3Info.getUrl());intent.putExtra("MSG",AppConstant.PlayerMsg.PLAY_MSG);startService(intent);}/***单曲循环*/publicvoidrepeat_one(){Intentintent=newIntent(CTL_ACTION);intent.putExtra("control",1);sendBroadcast(intent);}/***全部循环*/publicvoidrepeat_all(){Intentintent=newIntent(CTL_ACTION);intent.putExtra("control",2);sendBroadcast(intent);}/***顺序播放*/publicvoidrepeat_none(){Intentintent=newIntent(CTL_ACTION);intent.putExtra("control",3);sendBroadcast(intent);}/***随机播放*/publicvoidshuffleMusic(){Intentintent=newIntent(CTL_ACTION);intent.putExtra("control",4);sendBroadcast(intent);}publicvoidmusicListItemDialog(){String[]menuItems=newString[]{"播放音乐","设为铃声","查看详情"};ListViewmenuList=newListView(HomeActivity.this);menuList.setCacheColorHint(Color.TRANSPARENT);menuList.setDividerHeight(1);menuList.setAdapter(newArrayAdapter<String>(HomeActivity.this,R.layout.context_dialog_layout,R.id.dialogText,menuItems));menuList.setLayoutParams(newLayoutParams(ConstantUtil.getScreen(HomeActivity.this)[0]/2,LayoutParams.WRAP_CONTENT));finalCustomDialogcustomDialog=newCustomDialog.Builder(HomeActivity.this).setTitle(R.string.operation).setView(menuList).create();customDialog.show();menuList.setOnItemClickListener(newOnItemClickListener(){@OverridepublicvoidonItemClick(AdapterView<?>parent,Viewview,intposition,longid){customDialog.cancel();customDialog.dismiss();}});}publicvoidplayMusic(intlistPosition){if(mp3Infos!=null){Mp3Infomp3Info=mp3Infos.get(listPosition);musicTitle.setText(mp3Info.getTitle());Intentintent=newIntent(HomeActivity.this,PlayerActivity.class);intent.putExtra("title",mp3Info.getTitle());intent.putExtra("url",mp3Info.getUrl());intent.putExtra("artist",mp3Info.getArtist());intent.putExtra("listPosition",listPosition);intent.putExtra("currentTime",currentTime);intent.putExtra("repeatState",repeatState);intent.putExtra("shuffleState",isShuffle);intent.putExtra("MSG",AppConstant.PlayerMsg.PLAY_MSG);startActivity(intent);}}@OverrideprotectedvoidonStop(){//TODOAuto-generatedmethodstubsuper.onStop();}@OverrideprotectedvoidonDestroy(){//TODOAuto-generatedmethodstubsuper.onDestroy();}/***按返回键弹出对话框确定退出*/@OverridepublicbooleanonKeyDown(intkeyCode,KeyEventevent){if(keyCode==KeyEvent.KEYCODE_BACK&&event.getAction()==KeyEvent.ACTION_DOWN){newAlertDialog.Builder(this).setIcon(R.drawable.ic_launcher).setTitle("退出").setMessage("您确定要退出?").setNegativeButton("取消",null).setPositiveButton("确定",newDialogInterface.OnClickListener(){@OverridepublicvoidonClick(DialogInterfacedialog,intwhich){finish();Intentintent=newIntent(HomeActivity.this,PlayerService.class);unregisterReceiver(homeReceiver);stopService(intent);//停止后台服务}}).show();}returnsuper.onKeyDown(keyCode,event);}//自定义的BroadcastReceiver,负责监听从Service传回来的广播publicclassHomeReceiverextendsBroadcastReceiver{@OverridepublicvoidonReceive(Contextcontext,Intentintent){Stringaction=intent.getAction();if(action.equals(MUSIC_CURRENT)){//currentTime代表当前播放的时间currentTime=intent.getIntExtra("currentTime",-1);musicDuration.setText(MediaUtil.formatTime(currentTime));}elseif(action.equals(MUSIC_DURATION)){duration=intent.getIntExtra("duration",-1);}elseif(action.equals(UPDATE_ACTION)){//获取Intent中的current消息,current代表当前正在播放的歌曲listPosition=intent.getIntExtra("current",-1);if(listPosition>=0){musicTitle.setText(mp3Infos.get(listPosition).getTitle());}}elseif(action.equals(REPEAT_ACTION)){repeatState=intent.getIntExtra("repeatState",-1);switch(repeatState){caseisCurrentRepeat://单曲循环repeatBtn.setBackgroundResource(R.drawable.repeat_current_selector);shuffleBtn.setClickable(false);break;caseisAllRepeat://全部循环repeatBtn.setBackgroundResource(R.drawable.repeat_all_selector);shuffleBtn.setClickable(false);break;caseisNoneRepeat://无重复repeatBtn.setBackgroundResource(R.drawable.repeat_none_selector);shuffleBtn.setClickable(true);break;}}elseif(action.equals(SHUFFLE_ACTION)){isShuffle=intent.getBooleanExtra("shuffleState",false);if(isShuffle){isNoneShuffle=false;shuffleBtn.setBackgroundResource(R.drawable.shuffle_selector);repeatBtn.setClickable(false);}else{isNoneShuffle=true;shuffleBtn.setBackgroundResource(R.drawable.shuffle_none_selector);repeatBtn.setClickable(true);}}}}}

到这里,要开讲啦。

以下是需要注意的几点:

1. 音乐是通过Service来播放的,Activity通过启动服务来实现在后台播放音乐。

2. Activity中自定义了一个广播接收器,需要进行intent过滤器的定义,动作的添加,注册广播接收器:

[java]view plaincopy <spanstyle="white-space:pre"></span>homeReceiver=newHomeReceiver();//创建IntentFilterIntentFilterfilter=newIntentFilter();//指定BroadcastReceiver监听的Actionfilter.addAction(UPDATE_ACTION);filter.addAction(MUSIC_CURRENT);filter.addAction(MUSIC_DURATION);filter.addAction(REPEAT_ACTION);filter.addAction(SHUFFLE_ACTION);//注册BroadcastReceiverregisterReceiver(homeReceiver,filter);

3. 在广播接收器类当中对动作进行处理,比如实现时间的更新和标题的更新等。

4. 这里还要注意按钮触发,播放状态的改变,比如音乐循环,有三种状态:单曲、全部循环、顺序,每切换一个状态都要向服务发送一条广播,通知它要改变状态。

5. 点击列表的时候,会跳入到播放界面的Activity中,要注意用intent来传递参数,注意每个参数的用途,比如title、url、MSG,就分别代表标题、路径、播放状态。

6. 长按列表会弹出自定义对话框,也会有短暂的震动效果,自定义对话框需要自行实现。这里我也贴一下实现代码吧。

[java]view plaincopy packagecom.wwj.sb.utils;importandroid.app.Activity;importandroid.app.Dialog;importandroid.content.Context;importandroid.content.DialogInterface;importandroid.text.TextUtils;importandroid.view.LayoutInflater;importandroid.view.View;importandroid.view.ViewGroup;importandroid.view.ViewGroup.LayoutParams;importandroid.widget.Button;importandroid.widget.FrameLayout;importandroid.widget.ImageView;importandroid.widget.LinearLayout;importandroid.widget.TextView;importcom.wwj.sb.activity.R;/***自定义对话框类**@authorwwj**/publicclassCustomDialogextendsDialog{publicCustomDialog(Contextcontext){super(context);}publicCustomDialog(Contextcontext,inttheme){super(context,theme);}publicstaticclassBuilder{privateContextcontext;privateintmIcon=-1;//提示图标privateCharSequencemTitle;//提示标题privateCharSequencemMessage;//提示内容privateCharSequencemPositiveButtonText;//确定按钮文本privateCharSequencemNegativeButtonText;//取消按钮文本privateCharSequencemNeutralButtonText;//中间按钮文本privatebooleanmCancelable=true;//是否启用取消键privateintmViewSpacingLeft;privateintmViewSpacingTop;privateintmViewSpacingRight;privateintmViewSpacingBottom;privatebooleanmViewSpacingSpecified=false;//提示内容ViewprivateViewmView;//各种触发事件privateOnClickListenermPositiveButtonClickListener,mNegativeButtonClickListener,mNeutralButtonClickListener;privateOnCancelListenermCancelListener;//取消键事件privateOnKeyListenermKeyListener;//按键处理publicBuilder(Contextcontext){this.context=context;}publicBuildersetMessage(CharSequencemessage){this.mMessage=message;returnthis;}publicBuildersetMessage(intmessage){this.mMessage=context.getText(message);returnthis;}publicBuildersetTitle(inttitle){this.mTitle=context.getText(title);returnthis;}publicBuildersetTitle(CharSequencetitle){this.mTitle=title;returnthis;}publicBuildersetIcon(inticon){this.mIcon=icon;returnthis;}publicBuildersetView(Viewview){this.mView=view;mViewSpacingSpecified=false;returnthis;}publicBuildersetView(Viewview,intleft,inttop,intright,intbottom){this.mView=view;this.mViewSpacingLeft=left;this.mViewSpacingTop=top;this.mViewSpacingRight=right;this.mViewSpacingBottom=bottom;mViewSpacingSpecified=true;returnthis;}publicBuildersetPositonButton(inttextId,finalOnClickListenerlistener){this.mPositiveButtonText=context.getText(textId);this.mPositiveButtonClickListener=listener;returnthis;}publicBuildersetPostionButton(Stringtext,finalOnClickListenerlistener){this.mPositiveButtonText=text;this.mPositiveButtonClickListener=listener;returnthis;}publicBuildersetNeutralButton(inttextId,finalOnClickListenerlistener){this.mNeutralButtonText=context.getText(textId);this.mNeutralButtonClickListener=listener;returnthis;}publicBuildersetNeutralButton(Stringtext,finalOnClickListenerlistener){this.mNeutralButtonText=text;this.mNeutralButtonClickListener=listener;returnthis;}publicBuildersetNegativeButton(inttextId,finalOnClickListenerlistener){this.mNegativeButtonText=context.getText(textId);this.mNegativeButtonClickListener=listener;returnthis;}publicBuildersetNegativeButton(Stringtext,finalOnClickListenerlistener){this.mNegativeButtonText=text;this.mNegativeButtonClickListener=listener;returnthis;}publicBuildersetCancelable(booleancancelable){this.mCancelable=cancelable;returnthis;}publicBuildersetOnCancelListener(OnCancelListenerlistener){this.mCancelListener=listener;returnthis;}publicBuildersetOnKeyListener(OnKeyListenerlistener){this.mKeyListener=listener;returnthis;}publicCustomDialogcreate(){LayoutInflaterinflater=(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);finalCustomDialogdialog=newCustomDialog(context,R.style.CustomDialog);dialog.setCancelable(mCancelable);//设置取消键事件if(mCancelListener!=null){dialog.setOnCancelListener(mCancelListener);}//设置键盘监听事件if(mKeyListener!=null){dialog.setOnKeyListener(mKeyListener);}//获取对话框布局Viewlayout=inflater.inflate(R.layout.alert_dialog,(ViewGroup)(((Activity)context).findViewById(R.id.parentPanel)));layout.setLayoutParams(newLayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.WRAP_CONTENT));//设置标题((TextView)layout.findViewById(R.id.alertTitle)).setText(mTitle);//设置图标if(mIcon!=-1){((ImageView)layout.findViewById(R.id.icon)).setBackgroundResource(mIcon);}intcount=0;//设置确定按钮if(setButton(layout,mPositiveButtonText,R.id.button1,dialog,mPositiveButtonClickListener))count++;//设置拒绝按钮if(setButton(layout,mNegativeButtonText,R.id.button2,dialog,mNegativeButtonClickListener))count++;//设置中间按钮if(setButton(layout,mNeutralButtonText,R.id.button3,dialog,mNeutralButtonClickListener))count++;if(count==0){layout.findViewById(R.id.buttonPanel).setVisibility(View.GONE);}//一个按钮时,显示两边空间if(count==1){layout.findViewById(R.id.leftSpacer).setVisibility(View.INVISIBLE);layout.findViewById(R.id.rightSpacer).setVisibility(View.INVISIBLE);}//设置提示消息if(!TextUtils.isEmpty(mMessage)){((TextView)layout.findViewById(R.id.message)).setText(mMessage);}else{((LinearLayout)layout.findViewById(R.id.contentPanel)).setVisibility(View.GONE);}//设置提示内容布局if(mView!=null){finalFrameLayoutcustomPanel=(FrameLayout)layout.findViewById(R.id.customPanel);if(mViewSpacingSpecified){customPanel.setPadding(mViewSpacingLeft,mViewSpacingTop,mViewSpacingRight,mViewSpacingBottom);}customPanel.addView(mView);}else{((FrameLayout)layout.findViewById(R.id.customPanel)).setVisibility(View.GONE);}dialog.setContentView(layout);returndialog;}publicCustomDialogshow(){CustomDialogdialog=create();dialog.show();returndialog;}privatebooleansetButton(Viewlayout,CharSequencemPositiveButtonText,intid,finalDialogdialog,finalOnClickListenerlistener){if(!TextUtils.isEmpty(mPositiveButtonText)){finalButtonbutton=(Button)layout.findViewById(id);button.setText(mPositiveButtonText);if(listener!=null){button.setOnClickListener(newView.OnClickListener(){@OverridepublicvoidonClick(Viewv){listener.onClick(dialog,DialogInterface.BUTTON_POSITIVE);}});}else{//默认事件为关闭对话框button.setOnClickListener(newView.OnClickListener(){@OverridepublicvoidonClick(Viewv){dialog.cancel();dialog.dismiss();}});}returntrue;}else{layout.findViewById(id).setVisibility(View.GONE);returnfalse;}}}}

关于主界面的业务逻辑具体实现和需要注意的地方,小巫已经说完了。其实最重要的是要写好服务类,下一篇播放将会给童鞋们介绍服务类的实现。最后感谢大家的关注。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。