package Ġcom . github . vk ay 9 4 . d tp v . youtube . views Ċ Ċ import Ġandroid . animation . Value Animator Ċ import Ġandroid . content . Context Ċ import Ġandroid . util . Attribute Set Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . widget . ImageView Ċ import Ġandroid . widget . LinearLayout Ċ import Ġandroid . widget . TextView Ċ import Ġandroidx . annotation . Drawable Res Ċ import Ġandroidx . constraint layout . widget . Constraint Layout Ċ import Ġandroidx . core . animation . do On End Ċ import Ġandroidx . core . animation . do On Start Ċ import Ġcom . github . vk ay 9 4 . d tp v . R Ċ Ċ /** Ċ Ġ* ĠLayout Ġgroup Ġwhich Ġhandles Ġthe Ġicon Ġanimation Ġwhile Ġforwarding Ġand Ġre wind ing . Ċ Ġ* Ċ Ġ* ĠSince Ġit 's Ġbased Ġon Ġview 's Ġalpha Ġthe Ġf ading Ġeffect Ġis Ġmore Ġfluid Ġ( more ĠYouTube - like ) Ġthan Ċ Ġ* Ġusing Ġstatic Ġdraw ables , Ġespecially Ġwhen Ġ[ cycle Duration ] Ġis Ġlow . Ċ Ġ* Ċ Ġ* ĠUsed Ġby Ġ[ YouTube Overlay ][ com . github . vk ay 9 4 . d tp v . youtube . YouTube Overlay ]. Ċ Ġ*/ Ċ class ĠSecond s View ( context : ĠContext , Ġattrs : ĠAttributeSet ?) Ġ: ĊĠĠĠ ĠConstraint Layout ( context , Ġattrs ) Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġtriangles Container : ĠLinearLayout ĊĠĠĠ Ġprivate Ġvar Ġseconds TextView : ĠTextView ĊĠĠĠ Ġprivate Ġvar Ġicon 1 : ĠImageView ĊĠĠĠ Ġprivate Ġvar Ġicon 2 : ĠImageView ĊĠĠĠ Ġprivate Ġvar Ġicon 3 : ĠImageView ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ ĠLayoutInflater . from ( context ). inflate ( R . layout . yt _ seconds _ view , Ġthis , Ġtrue ) ĊĊĠĠĠĠĠĠĠ Ġtriangles Container Ġ= ĠfindViewById ( R . id . triangle _ container ) ĊĠĠĠĠĠĠĠ Ġseconds TextView Ġ= ĠfindViewById ( R . id . tv _ seconds ) ĊĠĠĠĠĠĠĠ Ġicon 1 Ġ= ĠfindViewById ( R . id . icon _ 1 ) ĊĠĠĠĠĠĠĠ Ġicon 2 Ġ= ĠfindViewById ( R . id . icon _ 2 ) ĊĠĠĠĠĠĠĠ Ġicon 3 Ġ= ĠfindViewById ( R . id . icon _ 3 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠDefines Ġthe Ġduration Ġfor Ġa Ġfull Ġcycle Ġof Ġthe Ġtriangle Ġanimation . ĊĠĠĠĠ Ġ* ĠEach Ġanimation Ġstep Ġtakes Ġ 2 0 % Ġof Ġit . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġcycle Duration : ĠLong Ġ= Ġ 7 5 0 L ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfirst Animator . duration Ġ= Ġvalue Ġ/ Ġ 5 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsecond Animator . duration Ġ= Ġvalue Ġ/ Ġ 5 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthird Animator . duration Ġ= Ġvalue Ġ/ Ġ 5 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfourth Animator . duration Ġ= Ġvalue Ġ/ Ġ 5 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġf ifth Animator . duration Ġ= Ġvalue Ġ/ Ġ 5 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSets Ġthe Ġ` TextView `' s Ġseconds Ġtext Ġaccording Ġto Ġthe Ġdevice ` s Ġlanguage . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġseconds : ĠInt Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġseconds TextView . text Ġ= Ġcontext . resources . get Quantity String ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . plurals . quick _ seek _ x _ second , Ġvalue , Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠMir rors Ġthe Ġtriangles Ġdepending Ġon Ġwhat Ġkind Ġof Ġtype Ġshould Ġbe Ġused Ġ( forward / rewind ). ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġis Forward : ĠBoolean Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtriangles Container . rotation Ġ= Ġif Ġ( value ) Ġ 0 f Ġelse Ġ 1 8 0 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġval ĠtextView : ĠTextView ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġseconds TextView ĊĊĠĠĠ Ġ@ Drawable Res ĊĠĠĠ Ġvar Ġicon : ĠInt Ġ= ĠR . drawable . ic _ play _ triangle ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( value Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġicon 1 . setImage Resource ( value ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġicon 2 . setImage Resource ( value ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġicon 3 . setImage Resource ( value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠStarts Ġthe Ġtriangle Ġanimation ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġstart () Ġ{ ĊĠĠĠĠĠĠĠ Ġstop () ĊĠĠĠĠĠĠĠ Ġfirst Animator . start () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSto ps Ġthe Ġtriangle Ġanimation ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġstop () Ġ{ ĊĠĠĠĠĠĠĠ Ġfirst Animator . cancel () ĊĠĠĠĠĠĠĠ Ġsecond Animator . cancel () ĊĠĠĠĠĠĠĠ Ġthird Animator . cancel () ĊĠĠĠĠĠĠĠ Ġfourth Animator . cancel () ĊĠĠĠĠĠĠĠ Ġf ifth Animator . cancel () ĊĠĠĠĠĠĠĠ Ġreset () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġreset () Ġ{ ĊĠĠĠĠĠĠĠ Ġicon 1 . alpha Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠ Ġicon 2 . alpha Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠ Ġicon 3 . alpha Ġ= Ġ 0 f ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġfirst Animator : ĠValue Animator Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠValue Animator . of Float ( 0 f , Ġ 1 f ). set Duration ( cycle Duration Ġ/ Ġ 5 ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdo On Start Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġicon 1 . alpha Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġicon 2 . alpha Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġicon 3 . alpha Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Update Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġicon 1 . alpha Ġ= Ġ( it . animated Value Ġas ĠFloat ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġdo On End Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsecond Animator . start () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġsecond Animator : ĠValue Animator Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠValue Animator . of Float ( 0 f , Ġ 1 f ). set Duration ( cycle Duration Ġ/ Ġ 5 ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdo On Start Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġicon 1 . alpha Ġ= Ġ 1 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġicon 2 . alpha Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġicon 3 . alpha Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Update Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġicon 2 . alpha Ġ= Ġ( it . animated Value Ġas ĠFloat ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdo On End Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthird Animator . start () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġthird Animator : ĠValue Animator Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠValue Animator . of Float ( 0 f , Ġ 1 f ). set Duration ( cycle Duration Ġ/ Ġ 5 ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdo On Start Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġicon 1 . alpha Ġ= Ġ 1 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġicon 2 . alpha Ġ= Ġ 1 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġicon 3 . alpha Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Update Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġicon 1 . alpha Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 f Ġ- Ġicon 3 . alpha Ġ// Ġor Ġ 1 f Ġ- Ġit Ġ( t 3 . alpha Ġ=> Ġall Ġthree Ġstay Ġa Ġlittle Ġlonger Ġtogether ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġicon 3 . alpha Ġ= Ġ( it . animated Value Ġas ĠFloat ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdo On End Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfourth Animator . start () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġfourth Animator : ĠValue Animator Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠValue Animator . of Float ( 0 f , Ġ 1 f ). set Duration ( cycle Duration Ġ/ Ġ 5 ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdo On Start Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġicon 1 . alpha Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġicon 2 . alpha Ġ= Ġ 1 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġicon 3 . alpha Ġ= Ġ 1 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Update Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġicon 2 . alpha Ġ= Ġ 1 f Ġ- Ġ( it . animated Value Ġas ĠFloat ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdo On End Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġf ifth Animator . start () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġf ifth Animator : ĠValue Animator Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠValue Animator . of Float ( 0 f , Ġ 1 f ). set Duration ( cycle Duration Ġ/ Ġ 5 ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdo On Start Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġicon 1 . alpha Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġicon 2 . alpha Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġicon 3 . alpha Ġ= Ġ 1 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Update Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġicon 3 . alpha Ġ= Ġ 1 f Ġ- Ġ( it . animated Value Ġas ĠFloat ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdo On End Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfirst Animator . start () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }