package Ġme . s het j . mp 3 recorder . record . adapter ĊĊ Ċ import Ġandroid . animation . Value Animator Ċ import Ġandroid . view . View Ċ import Ġandroid . view . animation . Accel erate De cel erate Interpolator Ċ import Ġandroid . widget . ImageView Ċ import Ġandroid . widget . ProgressBar Ċ import Ġandroid . widget . Seek Bar Ċ import Ġandroid . widget . TextView Ċ import Ġandroidx . core . animation . do On End Ċ import Ġcom . ch ad . library . adapter . base . Base Quick Adapter Ċ import Ġcom . ch ad . library . adapter . base . view holder . Base ViewHolder Ċ import Ġio . reactivex . rx java 3 . dis pos ables . Composite Disposable Ċ import Ġio . reactivex . rx java 3 . dis pos ables . Disposable Ċ import Ġme . s het j . base . tools . app . Ar ms Utils Ċ import Ġme . s het j . mp 3 recorder . R Ċ import Ġme . s het j . mp 3 recorder . record . bean . Record Ċ import Ġme . s het j . mp 3 recorder . record . utils . Lifecycle Listener Ċ import Ġme . s het j . mp 3 recorder . record . utils . MediaPlayer Utils Ċ import Ġme . s het j . mp 3 recorder . record . utils . Record Player Listener Ċ import Ġme . s het j . mp 3 recorder . record . utils . Util Ċ import Ġme . s het j . player . Player Listener Ċ import Ġjava . io . File ĊĊ Ċ /** Ċ Ġ* Ġ å½ķ éŁ³ åĪĹè¡¨ Ċ Ġ* Ġ ä¸Ĭä¼ł åĬ¨çĶ» æııè¿° ï¼ļ Ċ Ġ* Ġ 1 . é¦ĸåħĪ æĺ¯ èİ·åıĸ token ĠæĹ¶ ï¼Į ä½¿çĶ¨ ä¸Ģ éĹ ª ä¸Ģ éĹ ª åĬ¨çĶ» Ġshow Alpha Animator Ċ Ġ* Ġ 2 . èİ·åıĸ åĪ° token çļĦæĹ¶åĢĻ ï¼Į ä¸Ĭä¼ł åħĪ æī§è¡Į ä¸Ģä¸ª 1 . 5 ç§Ĵ çļĦ è¿Ľ åº¦ åĬ¨çĶ» ï¼Ī 0 ~ 4 0 ï¼ī Ċ Ġ* Ġ 3 . å¦Ĥæŀľ åľ¨ 1 . 5 ç§Ĵ æī§è¡Į æĪĲåĬŁ ï¼Į å°± åľ¨ æī§è¡Į ä¸Ģä¸ª å¹³ æ»ĳ åĬ¨çĶ» ï¼Ī progress - 1 0 0 ï¼ī Ċ Ġ* Ġ 4 . å¦Ĥæŀľ 1 . 5 åĲİ è¿ĺ ä¹Ī æľī ä¸Ĭä¼ł æĪĲåĬŁ ï¼Į å°± åĽŀè°ĥ åıĺåĮĸ è¿Ľ åº¦ Ċ Ġ* Ġ 5 . ä¸Ĭä¼ł æĪĲåĬŁ åĲİ éĩį ç½® Ċ Ġ* Ġ@ author Ġs het j Ċ Ġ*/ Ċ class ĠRecord Adapter ( data : ĠMutable List < Record > ?) Ġ: ĠBase Quick Adapter < Record , ĠBase ViewHolder >( R . layout . item _ record _ view , Ġdata ), ĊĠĠĠ ĠLifecycle Listener Ġ{ ĊĊĠĠĠ Ġvar Ġcur Position Ġ= Ġ- 1 ĊĠĠĠĠĠĠĠ Ġprivate Ġset ĊĠĠĠ Ġprivate Ġval Ġmedia Utils : ĠMedia Player Utils = ĠMedia Player Utils () ĊĠĠĠ Ġprivate Ġvar Ġm Composite Disposable : ĠComposite Disposable ? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġfun Ġconvert ( holder : ĠBase ViewHolder , Ġitem : ĠRecord ) Ġ{ ĊĠĠĠĠĠĠĠ Ġitem . let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġitem Position Ġ= Ġholder . layout Position Ġ- Ġheader Layout Count ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġseek Bar Ġ= Ġholder . getView < Seek Bar >( R . id . seek Bar _ record ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġseek Bar . max Ġ= Ġitem . audio Length Ġ* Ġ 1 0 0 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġseek Bar . tag Ġ= Ġitem . audio _ url ĊĠĠĠĠĠĠĠĠĠĠĠ Ġholder . getView < ImageView >( R . id . iv _ play ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( tag Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtag Ġ= ĠRecord Player Listener ( holder , Ġmedia Utils ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset OnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplay Music ( item . audio _ url , Ġtag Ġas ĠRecord Player Listener ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Utils . set Seek To Play ( seek Bar . progress ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġholder . setText ( R . id . tv _ name , Ġitem . audio Name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set G one ( R . id . rl _ record _ view 2 , Ġcur Position Ġ!= Ġitem Position ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setText ( R . id . tv _ time _ all , ĠUtil . format Seconds 3 ( item . audio Length )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setText ( R . id . tv _ read _ time , ĠUtil . format Seconds 3 ( 0 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setText ( R . id . tv _ time , ĠUtil . format Seconds 2 ( item . audio Length )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġholder . getView < View >( R . id . tv _ upload ). setOnClickListener Ġ{ Ġstart Upload ( holder , Ġitem ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġconvert ( holder : ĠBase ViewHolder , Ġitem : ĠRecord , Ġpayload s : ĠList < Any >) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġitem Position Ġ= Ġholder . layout Position Ġ- Ġheader Layout Count ĊĠĠĠĠĠĠĠ Ġsuper . convert ( holder , Ġitem , Ġpayload s ) ĊĠĠĠĠĠĠĠ Ġholder . setText ( R . id . tv _ name , Ġitem . audio Name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set G one ( R . id . rl _ record _ view 2 , Ġcur Position Ġ!= Ġitem Position ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠæĬ Ĭ çķĮéĿ¢ æĶ¶ èµ·æĿ¥ ï¼Į åģľæŃ¢ æĴŃæĶ¾ éŁ³ ä¹Ĳ ï¼Į å¼Ģå§ĭ ä¸Ĭä¼ł ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġstart Upload ( helper : ĠBase ViewHolder , Ġitem : ĠRecord ) Ġ{ ĊĠĠĠĠĠĠĠ Ġhelper . set G one ( R . id . rl _ record _ view 2 , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setVisible ( R . id . tv _ time , Ġtrue ) ĊĠĠĠĠĠĠĠ Ġcur Position Ġ= Ġ- 1 ĊĠĠĠĠĠĠĠ Ġif Ġ(! media Utils . is Pause ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Utils . pause () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġupload Music ( item . audio _ url , Ġhelper . getView ( R . id . progressbar _ upload ), Ġhelper . getView ( R . id . tv _ progress )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ ä¸Ĭä¼ł ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġupload Music ( audio Url : ĠString ?, ĠprogressBar : ĠProgress Bar , Ġtv Progress : ĠTextView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! File ( audio Url !! ). exists ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAr ms Utils . makeText (" å½ĵåīį éĢī ä¸Ń æĸĩä»¶ å·²ç»ı ä¸ ¢ å¤± ~ ï¼Į è¯· åĪłéĻ¤ è¯¥ è®°å½ķ åĲİ éĩįæĸ° å½ķ åĪ¶ ï¼ģ ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġre cyclerView . alpha Ġ= Ġ 0 . 7 f ĊĠĠĠĠĠĠĠ Ġval Ġvalue Animator Ġ= Ġshow Animator ( progress Bar , Ġtv Progress , Ġ 0 , Ġ 1 0 0 , Ġ 2 5 0 0 ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdo On End Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠprogressBar . progress Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠprogressBar . alpha Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv Progress . text Ġ= Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠprogressBar . alpha Ġ= Ġ 1 f ĊĠĠĠĠĠĠĠ Ġ// å¼Ģå§ĭ æī§è¡Į è¿Ľ åº¦ åĬ¨çĶ» ĊĠĠĠĠĠĠĠ Ġvalue Animator . start () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ å±ķç¤º è¿Ľ åº¦ åĬ¨çĶ» ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġshow Animator ( progress Bar : ĠProgress Bar , Ġtv Progress : ĠTextView , Ġstart : ĠInt , Ġend : ĠInt , Ġtime : ĠInt ): ĠValue Animator Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġvalue Animator Ġ= ĠValue Animator . of Int ( start , Ġend ) ĊĠĠĠĠĠĠĠ Ġvalue Animator . duration Ġ= Ġtime . to Long () ĊĠĠĠĠĠĠĠ Ġvalue Animator . interpol ator Ġ= ĠAccel erate De cel erate Interpolator () ĊĠĠĠĠĠĠĠ Ġvalue Animator . add Update Listener Ġ{ Ġanimation Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġanimated Value Ġ= Ġanimation . animated Value Ġas ĠInt ĊĠĠĠĠĠĠĠĠĠĠĠ ĠprogressBar . progress Ġ= Ġanimated Value ĊĠĠĠĠĠĠĠĠĠĠĠ ĠprogressBar . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtv Progress . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtv Progress . text Ġ= ĠString . format ("% s %% ", Ġanimated Value . toString ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġvalue Animator ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġè®¾ç½® éĢī ä¸ŃçļĦ ä½įç½® ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset Play Position ( target Pos : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// åģľæŃ¢ éŁ³ ä¹Ĳ ĊĠĠĠĠĠĠĠ Ġif Ġ( target Pos Ġ== Ġ- 1 Ġ|| Ġcur Position Ġ!= Ġtarget Pos ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! media Utils . is Pause ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Utils . pause () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// å¦Ĥæŀľ ä¸į çĽ¸ çŃī ï¼Į è¯´æĺİ æľī åıĺåĮĸ ĊĠĠĠĠĠĠĠ Ġif Ġ( cur Position Ġ!= Ġtarget Pos ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġold Ġ= Ġcur Position ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . cur Position Ġ= Ġtarget Pos ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ- 1 Ġè¡¨ç¤º é»ĺè®¤ ä¸į åģļ ä»»ä½ķ åıĺåĮĸ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( old Ġ!= Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnotify Item Changed ( old Ġ+ Ġheader Layout Count , 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( target Pos Ġ!= Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnotify Item Changed ( target Pos Ġ+ Ġheader Layout Count , 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġplay Music ( url : ĠString ?, Ġlistener : ĠPlayer Listener ) Ġ{ ĊĠĠĠĠĠĠĠ Ġmedia Utils . play Or Stop ( url !! , Ġlistener ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonStart () Ġ{} ĊĊĠĠĠ Ġoverride Ġfun Ġon Stop () Ġ{ ĊĠĠĠĠĠĠĠ Ġmedia Utils . stop Play () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Resume () Ġ{ ĊĠĠĠĠĠĠĠ Ġmedia Utils . resume () ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġoverride Ġfun Ġon Pause () Ġ{ ĊĠĠĠĠĠĠĠ Ġmedia Utils . pause () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy () Ġ{ ĊĠĠĠĠĠĠĠ Ġmedia Utils . stop Play () ĊĠĠĠĠĠĠĠ Ġun Dispose () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġå°Ĩ Ġ[ Disposable ] Ġæ·»åĬł åĪ° Ġ[ Composite Disposable ] Ġä¸Ń ç»Łä¸Ģ ç®¡çĲĨ ĊĠĠĠĠ Ġ* Ġåı¯ åľ¨ Ġ{ on Destroy () Ġä¸Ń ä½¿çĶ¨ Ġ[. un Dispose ] Ġ åģľæŃ¢ æŃ£åľ¨ æī§è¡Į çļĦ ĠRx Java Ġ ä»»åĬ¡ , éģ¿åħį åĨħåŃĺ æ³ Ħ æ¼ı ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġdis posable ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġadd Dispose ( dis posable : ĠDis posable ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( m Composite Disposable Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Composite Disposable Ġ= ĠComposite Disposable () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġm Composite Disposable !!. add ( dis posable ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ åģľæŃ¢ éĽĨåĲĪ ä¸Ń æŃ£åľ¨ æī§è¡Į çļĦ ĠRx Java Ġ ä»»åĬ¡ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġun Dispose () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( m Composite Disposable Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Composite Disposable !!. clear () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ }