package Ġcom . le ov p . android base . utils Ċ Ċ import Ġandroid . app . Activity Ċ import Ġandroid . graphics .* Ċ import Ġandroid . graphics . drawable . Drawable Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . widget . Frame Layout Ċ import Ġandroidx . annotation . Int Range Ċ import Ġandroidx . annotation . Keep Ċ import Ġcom . le ov p . android base . Build Config Ċ import Ġcom . le ov p . android base . R Ċ import Ġcom . le ov p . android base . ext s . android . sp 2 px Ċ import Ġcom . le ov p . android base . ext s . kotlin . get Today Ċ import Ġcom . le ov p . log _ sdk . Log Context Ċ import Ġcom . le ov p . log _ sdk . base . IT AG Ċ import Ġjava . util .* Ċ import Ġkotlin . math . sqrt Ċ Ċ /** Ċ Ġ* ĠAuthor : ĠMichael ĠLe o Ċ Ġ* ĠDate : Ġ 2 0 - 1 1 - 4 Ġä¸Ĭ åįĪ 1 1 : 2 3 Ċ Ġ*/ Ċ object ĠWater mark Ġ{ ĊĠĠĠ Ġinternal Ġval Ġdefault Config Ġ= ĠWater mark Config () ĊĊĠĠĠ Ġfun Ġdefault Config ( init : ĠWater mark Config . () Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdefault Config . init () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġwith ( activity : ĠActivity ): ĠWater mark Creator Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlayout Ġ= ĠFrame Layout ( activity ) ĊĠĠĠĠĠĠĠ Ġlayout . setTag ( R . id . TAG _ WATER MARK _ LAYOUT , Ġtrue ) ĊĠĠĠĠĠĠĠ Ġlayout . layout Params Ġ= ĠFrame Layout . LayoutParams ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠViewGroup . LayoutParams . MATCH _ PARENT , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠViewGroup . LayoutParams . MATCH _ PARENT ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġroot View Ġ= Ġactivity . findViewById < ViewGroup >( android . R . id . content ) ĊĠĠĠĠĠĠĠ Ġroot View . setTag ( R . id . TAG _ WATER MARK _ IN _ USE , Ġtrue ) ĊĠĠĠĠĠĠĠ Ġroot View . addView ( layout ) ĊĠĠĠĠĠĠĠ Ġreturn ĠWater mark Creator ( layout ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġremove ( activity : ĠActivity ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġroot View Ġ= Ġactivity . findViewById < ViewGroup >( android . R . id . content ) ĊĠĠĠĠĠĠĠ Ġval Ġuse Watermark Ġ= Ġroot View . getTag ( R . id . TAG _ WATER MARK _ IN _ USE ) Ġas ? ĠBoolean Ġ== Ġtrue ĊĠĠĠĠĠĠĠ Ġif Ġ( use Watermark ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġroot View . child Count Ġ- Ġ 1 Ġdown To Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( root View . getChild At ( i ). getTag ( R . id . TAG _ WATER MARK _ LAYOUT ) Ġas ? ĠBoolean Ġ== Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroot View . remove View At ( i ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Keep ĊĠĠĠ Ġdata Ġclass ĠWater mark Config ( ĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠWater mark Ġtext ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġvar Ġtext : ĠString Ġ= ĠDate (). get Today (" yyyy - MM - dd ĠHH : mm : ss "), ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠWater mark Ġtext Ġcolor . ĊĠĠĠĠĠĠĠĠ Ġ* ĠExample : Ġ 0 x AE AE AE AE ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġvar ĠtextColor : ĠInt Ġ= ĠColor . parse Color ("# AE AE AE AE "), ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠWater mark Ġtext Ġsize Ġin Ġsp ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġvar Ġtext Size : ĠFloat Ġ= Ġ 1 6 F , ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠWater mark Ġtext Ġrotation Ġin Ġdegree ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġvar Ġrotation : ĠFloat Ġ= Ġ- 2 5 f , ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠWater mark Ġtext Ġline Ġsp acer Ġmultiple ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġvar Ġline Spacer Multiple : ĠFloat Ġ= Ġ 4 . 5 f , ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠWater mark Ġtext Ġline Ġword Ġmultiple ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġvar Ġword Spacer Multiple : ĠFloat Ġ= Ġ 1 . 3 f ĊĠĠĠ Ġ) Ċ } Ċ Ċ class ĠWater mark Creator Ġinternal Ġconstructor ( private Ġval Ġlayout : ĠFrame Layout ) Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġdefault Ġ= ĠWater mark . default Config . copy () ĊĊĠĠĠ Ġfun Ġinit ( init : ĠWater mark . Watermark Config . () Ġ-> ĠUnit ): ĠWater mark Creator Ġ{ ĊĠĠĠĠĠĠĠ Ġdefault . init () ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġshow ( text : ĠString ? Ġ= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdrawable Ġ= ĠWater mark Drawable () ĊĠĠĠĠĠĠĠ Ġdrawable . text Ġ= Ġtext Ġ?: Ġdefault . text ĊĠĠĠĠĠĠĠ Ġdrawable . textColor Ġ= Ġdefault . textColor ĊĠĠĠĠĠĠĠ Ġdrawable . text Size Ġ= Ġdefault . text Size ĊĠĠĠĠĠĠĠ Ġdrawable . rotation Ġ= Ġdefault . rotation ĊĠĠĠĠĠĠĠ Ġdrawable . line Spacer Multiple Ġ= Ġdefault . line Spacer Multiple ĊĠĠĠĠĠĠĠ Ġdrawable . word Spacer Multiple Ġ= Ġdefault . word Spacer Multiple ĊĠĠĠĠĠĠĠ Ġlayout . background Ġ= Ġdrawable ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġclass ĠWater mark Drawable Ġ: ĠDrawable () Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġpaint : ĠPaint Ġ= ĠPaint () ĊĠĠĠĠĠĠĠ Ġvar Ġtext : ĠString Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġvar ĠtextColor Ġ= Ġ 0 ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠText Ġfont Ġsize Ġin Ġsp ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġvar Ġtext Size : ĠFloat Ġ= Ġ 0 F ĊĠĠĠĠĠĠĠ Ġvar Ġrotation : ĠFloat Ġ= Ġ 0 F ĊĊĠĠĠĠĠĠĠ Ġvar Ġline Spacer Multiple Ġ= Ġ 4 . 5 f ĊĠĠĠĠĠĠĠ Ġvar Ġword Spacer Multiple Ġ= Ġ 1 . 3 f ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġdraw ( canvas : ĠCanvas ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġwidth Ġ= Ġbounds . right ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġheight Ġ= Ġbounds . bottom ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdiagonal Ġ= Ġsqrt ( width Ġ* Ġwidth Ġ+ Ġheight Ġ* Ġheight . toDouble ()). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpaint . color Ġ= ĠtextColor ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpaint . text Size Ġ= Ġsp 2 px ( text Size ). toFloat () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpaint . is Anti Alias Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfont Metrics Ġ= Ġpaint . font Metrics ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtext Height Ġ= Ġfont Metrics . desc ent Ġ- Ġfont Metrics . as cent ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtext Width Ġ= Ġpaint . measure Text ( text ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . draw Color ( Color . TRANSP ARENT ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . rotate ( rotation , Ġwidth Ġ/ Ġ 2 f , Ġheight Ġ/ Ġ 2 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġcount Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ(( index , Ġposition Y ) Ġin Ġ( 0 .. diagonal Ġstep Ġ( text Height Ġ* Ġline Spacer Multiple ). toInt ()). with Index ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( position X Ġin Ġ(- text Width Ġ* Ġword Spacer Multiple Ġ+ Ġindex Ġ% Ġ 2 Ġ* Ġtext Width Ġ* Ġ 0 . 5 f ). toInt () .. ( width Ġ+ Ġtext Width Ġ* Ġword Spacer Multiple ). toInt () Ġstep Ġ( text Width Ġ* Ġword Spacer Multiple ). toInt ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Build Config . DEBUG ) ĠLog Context . log . v ( IT AG , Ġ" watermark Ġloop Ġtime : Ġ${ ++ count }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . draw Text ( text , Ġposition X . toFloat (), Ġposition Y . toFloat (), Ġpaint ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . save () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . restore () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġset Alpha (@ Int Range ( from Ġ= Ġ 0 , Ġto Ġ= Ġ 2 5 5 ) Ġalpha : ĠInt ) Ġ{} ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġset Color Filter ( color Filter : ĠColor Filter ?) Ġ{} ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Opacity (): ĠInt Ġ= ĠPixel Format . TRANSL UC ENT ĊĠĠĠ Ġ} Ċ }