package Ġcom . outs book . example kotlin Ċ Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . Motion Event Ċ import Ġandroid . view . View Ċ import Ġandroidx . core . content . Context Compat Ċ import Ġcom . outs book . libs . can v ased itor . listeners . Canvas Editor Listener Ċ import Ġkotlinx . android . synt hetic . main . activity _ main .* Ċ Ċ class ĠMainActivity Ġ: ĠAppCompatActivity () Ġ{ ĊĊĠĠĠ Ġprivate Ġvar ĠstrokeWidth : ĠFloat Ġ= Ġ 2 0 f ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ main ) ĊĠĠĠĠĠĠĠ Ġinit Value () ĊĠĠĠĠĠĠĠ Ġinit ClickListener () ĊĠĠĠĠĠĠĠ Ġinit Canvas Editor Listener () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Value (){ ĊĠĠĠĠĠĠĠ Ġbutton Undo . image Alpha Ġ= Ġ 5 0 ĊĠĠĠĠĠĠĠ Ġbutton Redo . image Alpha Ġ= Ġ 5 0 ĊĠĠĠĠĠĠĠ Ġ// set Ġstroke Ġwidth ĊĠĠĠĠĠĠĠ Ġcanvas Editor . set Stroke Width ( stroke Width ) ĊĠĠĠĠĠĠĠ Ġ// set Ġpaint Ġcolor ĊĠĠĠĠĠĠĠ Ġcanvas Editor . set Paint Color ( Context Compat . getColor ( this , ĠR . color . color Black )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit ClickListener (){ ĊĠĠĠĠĠĠĠ Ġbutton St icker . setOnClickListener { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Add Ġdrawable Ġst icker ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdrawable Ġ= ĠContext Compat . get Drawable ( this , ĠR . drawable . app _ icon ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdrawable ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas Editor . add Drawable St icker ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbutton Text . setOnClickListener { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Add Ġtext Ġst icker ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtext Ġ= Ġ" Canvas " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠtextColor Ġ= ĠContext Compat . getColor ( this , ĠR . color . color Primary ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas Editor . add Text St icker ( text , ĠtextColor , Ġnull ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbutton St icker Text . setOnClickListener { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Add Ġtext Ġwith Ġdrawable Ġst icker ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdrawable Ġ= ĠContext Compat . get Drawable ( this , ĠR . drawable . ic _ pan orama _ 2 4 0 dp ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtext Ġ= Ġ" Canvas " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠtextColor Ġ= ĠContext Compat . getColor ( this , ĠR . color . color Accent ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdrawable ?. let { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas Editor . add Drawable Text St icker ( it , Ġtext , ĠtextColor , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbutton Black . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbutton Plus . setImage Drawable ( Context Compat . get Drawable ( this , ĠR . drawable . ic _ plus _ black _ 2 4 dp )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbutton Minus . setImage Drawable ( Context Compat . get Drawable ( this , ĠR . drawable . ic _ minus _ black _ 2 4 dp )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcolor Ġ= ĠContext Compat . getColor ( this , ĠR . color . color Black ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas Editor . set Paint Color ( color ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbutton Yellow . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbutton Plus . setImage Drawable ( Context Compat . get Drawable ( this , ĠR . drawable . ic _ plus _ yellow _ 2 4 dp )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbutton Minus . setImage Drawable ( Context Compat . get Drawable ( this , ĠR . drawable . ic _ minus _ yellow _ 2 4 dp )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcolor Ġ= ĠContext Compat . getColor ( this , ĠR . color . color Yellow ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas Editor . set Paint Color ( color ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbutton Plus . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠstrokeWidth Ġ+= Ġ 1 0 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas Editor . set Stroke Width ( stroke Width ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbutton Minus . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠstrokeWidth Ġ-= Ġ 1 0 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas Editor . set Stroke Width ( stroke Width ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbutton Save . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbitmap Ġ= Ġcanvas Editor . download Bitmap () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠimageView . setImage Bitmap ( bitmap ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview Image Preview . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbutton Undo . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas Editor . undo () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbutton Delete . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas Editor . removeAll () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbutton Redo . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas Editor . redo () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbutton Close . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview Image Preview . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Canvas Editor Listener (){ ĊĠĠĠĠĠĠĠ Ġcanvas Editor . set Listener ( object : ĠCanvas Editor Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Enable Undo ( is Enable : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġis Enable Ġ= Ġtrue Ġ( undo Ġlist Ġis Ġnot Ġempty ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġis Enable Ġ= Ġfalse Ġ( undo Ġlist Ġis Ġempty ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbutton Undo . image Alpha Ġ= Ġif ( is Enable ) Ġ 2 5 5 Ġelse Ġ 5 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Enable Redo ( is Enable : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġis Enable Ġ= Ġtrue Ġ( redo Ġlist Ġis Ġnot Ġempty ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġis Enable Ġ= Ġfalse Ġ( redo Ġlist Ġis Ġempty ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbutton Redo . image Alpha Ġ= Ġif ( is Enable ) Ġ 2 5 5 Ġelse Ġ 5 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Touch Event ( event : ĠMotion Event ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// When Ġthe Ġcanvas Ġtouch ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon St icker Active () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// When Ġa Ġst icker Ġchange Ġto Ġactive Ġmode ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon St icker Remove () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// When Ġa Ġst icker Ġremove Ġfrom Ġcanvas ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon St icker Done () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// When Ġthe Ġactive Ġst icker Ġadded Ġto Ġcanvas ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon St icker Zoom And Rotate () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// When Ġthe Ġactive Ġst icker Ġzoom Ġor Ġrotate ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon St icker Flip () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// When Ġthe Ġactive Ġst icker Ġflip ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} Ċ } Ċ