android項目實戰(zhàn)-多媒體開發(fā)shhmvmplayer播放器_第1頁
android項目實戰(zhàn)-多媒體開發(fā)shhmvmplayer播放器_第2頁
android項目實戰(zhàn)-多媒體開發(fā)shhmvmplayer播放器_第3頁
android項目實戰(zhàn)-多媒體開發(fā)shhmvmplayer播放器_第4頁
android項目實戰(zhàn)-多媒體開發(fā)shhmvmplayer播放器_第5頁
已閱讀5頁,還剩42頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

yer該項目采用的是MVPv層和p層的解耦使用目前比較流行的2、Ssh歡迎界面的完界面需求分析:1全屏2執(zhí)行縮放動畫3設(shè)置動畫,執(zhí)行動畫完畢界面跳1<stylename="AppTheme.FullScreen"<item2fromXScale,fromYScaleX,Y的縮放,0.01.0 動畫最終縮放的倍數(shù),1.01.0 兩個都為3設(shè)置動畫,執(zhí)行動畫完畢界面跳animation.setAnimationListener(newAnimation.AnimationListener(){publicvoidonAnimationStart(Animationanimation)}publicvoidonAnimationEnd(Animationanimation)startActivity(newIntent(S}publicvoidonAnimationRepeat(Animationanimation)}UI4.4以下版本、4.4、5.0以上版本,創(chuàng)建:values-v19,values-<stylename="AppTheme" <stylename="AppTheme" <item<item<stylename="AppTheme" <item<item<!--Android5.x<item1compile'com.roughike:bottom- app:bb_tabXmlResource="@xml/bottombar_tabs" 被選中的Tab的顏色 Tab切換時的動畫效果 未被選中的Tab的 未被選中的Tab的顏色 加載對應(yīng)的Tab資源2Bottombartab條目點擊publicvoidonTabSelected(@IdResinttabId)//tabIdFragmentFragmentfragment}1主要是對數(shù)據(jù)的緩存進行處理(框架才用Glide)newThread(newRunnable(){publicvoidrun()}2時不會發(fā)送給該用戶(適用于支持用戶登錄)3Wifi下加載網(wǎng)絡(luò)NetworkInfomobNetInfoActivity=connectivityManager.getActiveNetworkInfo();intnetType=mobNetInfoActivity.getType();returnnetType== 1styles中創(chuàng)建繼承自@android:style/Animation.ActivityStyle<stylename="ActivityAnimations"<item2、在對應(yīng)的樣式中配置windowAnimationStyle屬<item1aptprojectgradle//Addpluginbuildscript{dependenciesclasspath'com.neenbedankt.gradle.plugins:android-}}2、aptmodlegradle//Applyapplyplugin:'com.neenbedankt.android-3dagger2//AddDaggerdependenciesdependencies{compile'com.apt'com.} 1Type{Typesuperclass=subclass.getGenericSuperclass();if(superclassinstanceofClass){thrownewRuntimeException("Missingtype}return}public{type=}2ItHeiMaHttpheiMaHttpItHeiMaHttp.getInstance().addHead("參數(shù)名稱","參數(shù)").//加頭addParam("參數(shù)名稱參數(shù)WSCallBack<Bean>JSON,StringheiMaHttp.get("BASE_URL",newWSCallBack<Bean>(){publicvoidonFailure(Callcall,Exceptione)//}publicvoidonSuccess(Beanbean)//}1HttpManagerhttpManager=addParam("offset",offset+"").addParam("size",size+"");publicvoidonFailure(Callcall,Exceptione){}publicvoidonSuccess(List<Bean>Been){}2Bean中的TypeIconfinalinttag;Stringtype=ifACTIVITY".equalsIgnoreCase(type)打開頁面tag=0;}elseif(" tag=1;

}elseif("WEEK_MAIN_STAR".equalsIgnoreCase(type)){//(悅單)tag=}elseif("YLIST".equalsIgnoreCase(type)){//(悅單)點擊進去跟顯示悅單詳情一樣tag=3;}elseif("AD".equalsIgnoreCase(type)){tag=4;elseif("PROGRAM".equalsIgnoreCase(type))MVtag=}elseif("bulletin".equalsIgnoreCase(type)){tag=6;}elseif("fanart".equalsIgnoreCase(type)){tag=7;}elseif("live".equalsIgnoreCase(type)){tag=8;}elseif("LIVENEW".equalsIgnoreCase(type)||("LIVENEWLIST".equals(type))){tag=9;}elseif("INVENTORY".equalsIgnoreCase( tag=10;}elsetag=-}02、適配的處1、在基類中處理的寬protectedvoidobserv(intwidth,intheight)DisyMetricsmetrics=newDismWidth=metrics.widthPixels;mHeight=(mWidth*height)/}1V4publicvoidonRefresh(){}2、給RecyclerView增加滾動,如果滑到最后一個條目就加載下一頁數(shù)publicvoidonScrolled(RecyclerViewrecyclerView,intdx,intdy){super.onScrolled(recyclerView,dx,dy);}1<LinearLayoutxmlns:android="http://s app:tabSelectedTextColor="@android:color/white"http://tab被選的文本顏色 //tab沒有被選的文本顏色app:tabMode="scrollable"設(shè)置可以滑動 2、根據(jù)獲取到的數(shù)據(jù)初始化Vie ge的Adpaterfor(inti=0;i<data.size();i++){}3 05、”MV”ITEM1、MV中的Vie ger的條目都是Fragment的形式,在Fragment中要根據(jù)對應(yīng)的code獲取對應(yīng)的類型數(shù)據(jù),所以在Fragment初始化的時候就傳入對應(yīng)的codepublicstaticMvItemFragmentgetInstance(Stringcode)MvItemFragmentmvItemFragment=newMvItemFragment();Bundlebundle=newBundle();returnmvItemFragment;}//獲取codepublicvoidonCreate(@NullableBundlesavedInstanceState){code=(String)}//根據(jù)codepublicvoidgetData(Stringcode,intoffset,intsize)addParam("area",code).addParam("offset",""+offset).addParam("size",""+size);publicvoidonFailure(Callcall,Exceptione)}publicvoidonSuccess(MvItemBeanmvItemBean)}}06、”MV”ITEM//publicvoidonRefresh(){}//加載publicvoidonScrolled(RecyclerViewrecyclerView,intdx,intdy)}框和加載框才用比較火的compile 12、用戶按下返回publicvoidonBackPressed(){}super.onBackPressed();4、顯示finalMaterialDialog.Builderbuilder=newpublicvoidonClick(@NonNullMaterialDialogdialog,@NonNullDialogActionwhich){}publicvoidonClick(@NonNullMaterialDialogdialog,@NonNullDialogAction{}1Fragment//publicvoidshowDialog()MaterialDialog.Builderbuilder=newMaterialDialog.Builder(getActivity());gress(true,0);}//publicvoidif(dialog!=}MainActivitydispatchTouchEventcaselastY=ev.getRawY();floatmoveX=ev.getRawX();floatmoveY=ev.getRawY();offsetX=moveX-lastX;offsetY=moveY-floatintposition=if(absY>absX&&offsetY>10&&!isShowBottomBar&&//BottomBar}elseif(absY>absX&&offsetY<-10&&isShowBottomBar&&//BottomBar}2//privatevoidenterBottomBar(){isShowBottomBar=true;ObjectAnimatoroa=ObjectAnimator.ofFloat(bottomBar,"translationY",((float)bottomBar.getHeight()),0f);}//isShowBottomBar=ObjectAnimatoroa=ObjectAnimator.ofFloat(bottomBar,"translationY",0f,((float)}1RecyclerViewz StaggeredGridLayoutManager(2,StaggeredGridLayoutManager.VERTICAL);2、處理在滾動時移位的問 int1、條目點擊的處publicvoidonClick(Viewv)IntentmIntent=newIntent();switch(tag){casecasecasecase1:casecasecase2:case}} <item<solid<item//<item<solid器才用的是基于ijkyer的1、引入相應(yīng)的器23、根據(jù)Id獲取資源信息并通過器04MVPP1Dagger2實現(xiàn)層與層之間的2publicvoidquery(Contextcontext,MyCursorAdaptercursorAdapter)Uriuri=MediaStore.Audio.Media.MediaStore.Audio.Media.DURATION,MyQueryHandlermyQueryHandler=new//token:}05、獲取SD卡的權(quán)1,判斷是否申請了SD卡的權(quán)PackageManager.PERMISSION_DENIED2,申請SDK卡的權(quán)ActivityFragmentz3,權(quán)限申請結(jié)果protectedvoid plete(inttoken,Object,Cursorcursor){plete(token,,cursor);if(token==0&&instanceof //Cursor}}publicvoidonItemClick(AdapterView<?>parent,Viewview,intposition,longid){Cursorcursor=(Cursor)myCursorAdapter.getItem(position);IntentmIntent=newIntent(getActivity(),Music}2//CursorCursor移動-1publicstaticList<MusicBean>getMusicList(Cursorcursor){List<MusicBean>musicBeanList=newArrayList<>();ifwhileMusicBeanmusicBean=MusicBean.fromCursor(cursor);}}return}1Filefile=DecimalFormatdecimalFormat=newDecimalFormat();StringfileSize=decimalFormat.format(getFileSize(file));privatefloatgetFileSize(Filefile)if(file.exists())if(file.isDirectory())File[]listFiles=file.listFiles();floatsize=0.0f;for(FilemFile:listFiles)size}return}elsefloatsize=(float)file.length()/1024/1024;returnsize;}}return}2newThread(newRunnable()publicvoidrun()}1、音樂界面的幀動畫privatevoidyAnim()AnimationDrawabledrawable=(AnimationDrawable)ivAnim.getBackground();}2、由于音樂的需要進行,所以將音樂的放在運行在的Service中,并且需bindServicestartService來使用,bindServiceBinder對象,startServiceService傳遞數(shù)據(jù)用的:ServiceConnectionCallbackconnectionCallback=newServiceConnectionCallback();Intentintent=newIntent(this,MusicyService.class);intent.putExtra("musicList",musicList);//為了拿到binder對象,操作邏01、在Service中定義音樂的publicclassMusicyextendsBinder1、類對音樂代碼的實現(xiàn):publicvoidyMusic(){mediayer.reset();mediayer=null;}trymediayer=newMediaMusicItemmusicItem=media mediayer.setDataSource(musicItem.path);media}catch(IOExceptione){}}、 mond方法中接收數(shù)publicint mand(Intentintent,intflags,intstartId){inttemp=intent.getIntExtra("currentMusic", ying()&¤tMusic==temp){notifyy();}elsecurrentMusic=musicList=//開始.music .}}return}//設(shè)置準備的 Mediayer.OnPreparedListener Mediayer.OnPreparedListener(){publicvoidonPrepared(Mediayermp){}//設(shè)置完成的 pletionListener(){public pletion(Mediayermp)}@param@param@parampublicvoidonProgressChanged(SeekBarseekBar,intprogress,booleanfromUser){if(fromUser){ }}@parampublicvoidonStartTrackingTouch(SeekBarseekBar){ }@parampublicvoidonStopTrac

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論