package Ġcom . example . android _ study . jet pack . camera . record Video . view Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics . Canvas Ċ import Ġandroid . graphics . Color Ċ import Ġandroid . graphics . Paint Ċ import Ġandroid . graphics . Rect F Ċ import Ġandroid . os . Handler Ċ import Ġandroid . os . Looper Ċ import Ġandroid . os . Message Ċ import Ġandroid . util . Attribute Set Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . Motion Event Ċ import Ġandroid . view . View Ċ import Ġandroid . view . View . On Long ClickListener Ċ import Ġandroid . view . View Configuration Ċ import Ġcom . example . android _ study . R Ċ import Ġcom . example . android _ study ._ base . util . dp 2 px Ċ Ċ /** Ċ Ġ* Ġauthor ï¼ļ chs Ċ Ġ* Ġdate ï¼ļ 2 0 2 0 / 5 / 1 8 Ċ Ġ* Ġdes ï¼ļ Ġ å½ķ åĪ¶ æĮīéĴ® Ċ Ġ*/ Ċ class ĠRecord View Ġ@ Jvm Over loads Ġconstructor ( context : ĠContext , Ġattrs : ĠAttributeSet ? Ġ= Ġnull , Ġdef Style Attr : ĠInt Ġ= Ġ 0 ) Ġ: ĠView ( context , Ġattrs , Ġdef Style Attr ), ĠOn Long ClickListener , ĠView . OnClickListener Ġ{ ĊĠĠĠ Ġprivate Ġval Ġm Bg Color : ĠInt ĊĠĠĠ Ġprivate Ġval Ġm Stroke Color : ĠInt ĊĠĠĠ Ġprivate Ġval Ġm Stroke Width : ĠInt ĊĠĠĠ Ġprivate Ġval Ġm Duration : ĠInt ĊĠĠĠ Ġprivate Ġvar Ġm Width Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġm Height Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġval Ġm Radius : ĠInt ĊĠĠĠ Ġprivate Ġvar Ġm Progress Value Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġis Recording Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġm Arc Rect F : ĠRect F ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġval Ġm Bg Paint : ĠPaint ĊĠĠĠ Ġprivate Ġval Ġm Progress Paint : ĠPaint ĊĠĠĠ Ġprivate Ġvar Ġm On Record Listener : ĠOn Record Listener ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġm Start Record Time : ĠLong Ġ= Ġ 0 ĊĠĠĠ Ġfun Ġset On Record Listener ( on Record Listener : ĠOn Record Listener ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġm On Record Listener Ġ= Ġon Record Listener ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Event () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġhandler : ĠHandler Ġ= Ġobject Ġ: ĠHandler ( Looper . get Main Looper ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġhandle Message ( msg : ĠMessage ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . handle Message ( msg ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Progress Value ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpost Invalidate () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Progress Value Ġ< Ġm Duration Ġ* Ġ 1 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsend Empty Message Delayed ( 0 , ĠPROG RESS _ INTERVAL . to Long ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfinish Record () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġset On Touch Listener Ġ{ Ġv , Ġevent Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( event . action Ġ== ĠMotion Event . ACTION _ DOWN ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Start Record Time Ġ= ĠSystem . currentTimeMillis () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandler . send Empty Message ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( event . action Ġ== ĠMotion Event . ACTION _ UP ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġduration Ġ= ĠSystem . currentTimeMillis () Ġ- Ġm Start Record Time ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// æĺ¯åĲ¦ å¤§äºİ ç³»ç»Ł è®¾ å®ļçļĦ æľĢå°ı éķ¿ æĮī æĹ¶éĹ´ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( duration Ġ> ĠView Configuration . getLong Press Timeout ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfinish Record () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandler . remove Callbacks And Messages ( null ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Recording Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Start Record Time Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Progress Value Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpost Invalidate () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġset OnClickListener ( this ) ĊĠĠĠĠĠĠĠ Ġset On Long ClickListener ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġfinish Record () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( m On Record Listener Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm On Record Listener !!. on Finish () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Size Changed ( w : ĠInt , Ġh : ĠInt , Ġold w : ĠInt , Ġold h : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Size Changed ( w , Ġh , Ġold w , Ġold h ) ĊĠĠĠĠĠĠĠ Ġm Width Ġ= Ġw ĊĠĠĠĠĠĠĠ Ġm Height Ġ= Ġw ĊĠĠĠĠĠĠĠ Ġm Arc Rect F Ġ= ĠRect F ( m Stroke Width Ġ/ Ġ 2 f , Ġm Stroke Width Ġ/ Ġ 2 f , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Width Ġ- Ġm Stroke Width Ġ/ Ġ 2 f , Ġm Height Ġ- Ġm Stroke Width Ġ/ Ġ 2 f ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Draw ( canvas : ĠCanvas ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Draw ( canvas ) ĊĠĠĠĠĠĠĠ Ġcanvas . draw Circle ( m Width Ġ/ Ġ 2 f , Ġm Height Ġ/ Ġ 2 f , Ġm Radius . toFloat (), Ġm Bg Paint ) ĊĠĠĠĠĠĠĠ Ġif Ġ( is Recording ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . draw Circle ( m Width Ġ/ Ġ 2 f , Ġm Height Ġ/ Ġ 2 f , Ġm Radius Ġ/ Ġ 1 0 f Ġ* Ġ 1 1 , Ġm Bg Paint ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsweep Angle Ġ= Ġ 3 6 0 f Ġ* Ġm Progress Value Ġ/ Ġ( m Duration Ġ* Ġ 1 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i (" sweep Angle ", Ġsweep Angle . toString () Ġ+ Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . draw Arc ( m Arc Rect F !! , Ġ- 9 0 f , Ġsweep Angle , Ġfalse , Ġm Progress Paint ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Long Click ( v : ĠView ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġis Recording Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġif Ġ( m On Record Listener Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm On Record Listener !!. on Record Video () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonClick ( v : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( m On Record Listener Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm On Record Listener !!. on T ack Picture () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinterface ĠOn Record Listener Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġon T ack Picture () ĊĠĠĠĠĠĠĠ Ġfun Ġon Record Video () ĊĠĠĠĠĠĠĠ Ġfun Ġon Finish () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠPROG RESS _ INTERVAL Ġ= Ġ 1 0 0 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtyped Array Ġ= Ġcontext . obtain Styled Attributes ( attrs , ĠR . style able . Record View ) ĊĠĠĠĠĠĠĠ Ġm Bg Color Ġ= Ġtyped Array . getColor ( R . style able . Record View _ bg _ color , ĠColor . WHITE ) ĊĠĠĠĠĠĠĠ Ġm Stroke Color Ġ= Ġtyped Array . getColor ( R . style able . Record View _ stroke _ color , ĠColor . RED ) ĊĠĠĠĠĠĠĠ Ġm Stroke Width Ġ= Ġtyped Array . get Dimension Pixel Offset ( R . style able . Record View _ stroke _ width , Ġ 5 f . dp 2 px ()) ĊĠĠĠĠĠĠĠ Ġm Duration Ġ= Ġtyped Array . getInteger ( R . style able . Record View _ duration , Ġ 1 0 ) ĊĠĠĠĠĠĠĠ Ġm Radius Ġ= Ġtyped Array . get Dimension Pixel Offset ( R . style able . Record View _ radius , Ġ 4 0 f . dp 2 px ()) ĊĠĠĠĠĠĠĠ Ġtyped Array . recycle () ĊĠĠĠĠĠĠĠ Ġm Bg Paint Ġ= ĠPaint ( Paint . ANTI _ ALIAS _ FLAG ) ĊĠĠĠĠĠĠĠ Ġm Bg Paint . style Ġ= ĠPaint . Style . FILL ĊĠĠĠĠĠĠĠ Ġm Bg Paint . color Ġ= Ġm Bg Color ĊĠĠĠĠĠĠĠ Ġm Progress Paint Ġ= ĠPaint ( Paint . ANTI _ ALIAS _ FLAG ) ĊĠĠĠĠĠĠĠ Ġm Progress Paint . style Ġ= ĠPaint . Style . ST RO KE ĊĠĠĠĠĠĠĠ Ġm Progress Paint . color Ġ= Ġm Stroke Color ĊĠĠĠĠĠĠĠ Ġm Progress Paint . stroke Width Ġ= Ġm Stroke Width . toFloat () ĊĠĠĠĠĠĠĠ Ġset Event () ĊĠĠĠ Ġ} Ċ }