package Ġcom . example . face decor ater . gallery Ċ Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . content . Intent Ċ import Ġandroid . graphics .* Ċ import Ġandroid . net . Uri Ċ import Ġandroid . os . Build Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . util . Display Metrics Ċ import Ġandroid . view . MenuItem Ċ import Ġandroid . view . Motion Event Ċ import Ġandroid . view . View Ċ import Ġandroid . widget . Image Button Ċ import Ġandroid . widget . ImageView Ċ import Ġandroid . widget . Toast Ċ import Ġandroidx . annotation . Requires Api Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroidx . constraint layout . widget . Constraint Layout Ċ import Ġandroidx . constraint layout . widget . Constraint Set Ċ import Ġcom . example . face decor ater . R Ċ import Ġkotlinx . android . synt hetic . main . gallery _ sketch _ layout .* Ċ import Ġkotlinx . android . synt hetic . main . gallery _ st icker _ layout .* Ċ import Ġjava . io . ByteArray OutputStream Ċ import Ġjava . io . File Ċ import Ġjava . io . File OutputStream Ċ import Ġjava . util .* Ċ import Ġkotlin . collections . ArrayList Ċ Ċ @ Suppress Lint (" Click ableView Accessibility ") Ċ @ Requires Api ( Build . VERSION _ CODES . P ) Ċ class ĠGallery St icker Activity Ġ: ĠAppCompatActivity () Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġgallery Request Code Ġ= Ġ 3 ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġsave Directory : ĠFile ĊĠĠĠ Ġprivate Ġvar Ġst icker Buttons : ĠArrayList < Image Button >? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġstick ers : ĠArrayList < ImageView >? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . gallery _ st icker _ layout ) ĊĊĠĠĠĠĠĠĠ Ġval Ġuri Ġ= Ġintent . get Parcelable Extra < Uri >(" uri ") ĊĠĠĠĠĠĠĠ Ġgallery _ st icker _ imageView . setImage URI ( uri ) ĊĊĊĠĠĠĠĠĠĠ Ġsave Directory Ġ= Ġget Output Directory () ĊĊĠĠĠĠĠĠĠ Ġset Toolbar () ĊĠĠĠĠĠĠĠ Ġstick ers Ġ= ĠArrayList () ĊĠĠĠĠĠĠĠ Ġst icker Buttons Ġ= ĠArrayList < Image Button >(). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( gallery _ heart St icker ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( gallery _ star St icker ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( gallery _ sun ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġgallery _ heart St icker . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd St icker ( R . drawable . heart _ st icker ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġgallery _ star St icker . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd St icker ( R . drawable . star _ st icker ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġgallery _ sun . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd St icker ( R . drawable . bits un gl asses ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġgallery _ st icker _ add Button . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠgetImage From Gallery () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġgallery _ st icker _ save Button . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsave Image () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Toolbar () Ġ{ ĊĠĠĠĠĠĠĠ Ġgallery _ st icker _ toolbar . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Ġ= Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsubtitle Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġset Support ActionBar ( gallery _ st icker _ toolbar ) ĊĠĠĠĠĠĠĠ Ġsupport ActionBar ?. set Display Home As Up Enabled ( true ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠgetImage From Gallery () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaction Ġ= ĠIntent . ACTION _ GET _ CONTENT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtype Ġ= Ġ" image /* " ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠstartActivity For Result ( intent , Ġgallery Request Code ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsave Image () Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġdisplay Metrics Ġ= ĠDisplay Metrics () ĊĠĠĠĠĠĠĠ Ġwindow Manager . default Display . get Metrics ( display Metrics ) ĊĠĠĠĠĠĠĠ Ġval Ġimage Bitmap Ġ= Ġget Bitmap From ImageView ( gallery _ st icker _ imageView ) ĊĊĠĠĠĠĠĠĠ Ġval Ġcanvas Bitmap Ġ= ĠBitmap . create Bitmap ( display Metrics . width Pixels , Ġdisplay Metrics . height Pixels , ĠBitmap . Config . ARGB _ 8 8 8 8 ) ĊĊĠĠĠĠĠĠĠ Ġvar Ġcanvas Ġ= ĠCanvas ( canvas Bitmap ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdraw Bitmap ( image Bitmap , Ġgallery _ st icker _ imageView . x , gallery _ st icker _ imageView . y , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor ( view Ġin Ġstick ers !! ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġst icker Bitmap Ġ= Ġget Bitmap From ImageView ( view ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdraw Bitmap ( st icker Bitmap , Ġview . x , Ġview . y , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġphoto File Ġ= ĠFile ( save Directory , Ġ"${ System . currentTimeMillis ()}. png ") ĊĠĠĠĠĠĠĠ Ġphoto File . createNew File () ĊĠĠĠĠĠĠĠ Ġval Ġb os Ġ= ĠByteArrayOutputStream () ĊĠĠĠĠĠĠĠ Ġcanvas Bitmap . compress ( Bitmap . Compress Format . PNG , Ġ 9 0 , Ġb os ) ĊĠĠĠĠĠĠĠ Ġval Ġf os Ġ= ĠFileOutputStream ( photo File ) ĊĠĠĠĠĠĠĠ Ġf os . write ( bos . toByteArray ()) ĊĠĠĠĠĠĠĠ Ġf os . flush () ĊĠĠĠĠĠĠĠ Ġf os . close () ĊĠĠĠĠĠĠĠ ĠToast . makeText ( this , Ġ" success ", ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠ Ġ} ĊĠĠĠĠĊĊĠĠĠ Ġprivate Ġfun Ġget Bitmap From ImageView ( imageView : ĠImageView ) Ġ: ĠBitmap { ĊĠĠĠĠĠĠĠ Ġvar Ġcanvas Bitmap Ġ= ĠBitmap . create Bitmap ( imageView . width , ĠimageView . height , ĠBitmap . Config . ARGB _ 8 8 8 8 ) ĊĊĠĠĠĠĠĠĠ Ġvar Ġcanvas Ġ= ĠCanvas ( canvas Bitmap ) ĊĊĠĠĠĠĠĠĠ ĠimageView . draw ( canvas ) ĊĠĠĠĠĠĠĠ Ġreturn Ġcanvas Bitmap ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Output Directory (): ĠFile Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmedia Dir Ġ= Ġexternal Media Dirs . first OrNull ()?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFile ( it , Ġresources . getString ( R . string . app _ name )). apply Ġ{ Ġmkdir s () Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( media Dir Ġ!= Ġnull Ġ&& Ġmedia Dir . exists ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Dir Ġelse Ġfiles Dir ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Options ItemSelected ( item : ĠMenuItem ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( item . itemId ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġandroid . R . id . home Ġ-> Ġfinish () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . on Options ItemSelected ( item ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Activity Result ( request Code : ĠInt , ĠresultCode : ĠInt , Ġdata : ĠIntent ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Activity Result ( request Code , ĠresultCode , Ġdata ) ĊĠĠĠĠĠĠĠ Ġif Ġ( request Code Ġ== Ġgallery Request Code Ġ&& ĠresultCode Ġ== ĠRESULT _ OK Ġ&& ĠObjects . non Null ( data )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġimage Uri Ġ= Ġdata ?. data ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd St icker Button In Runtime ( image Uri !! ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ ĠI Ġmust Ġuse Ġdeprecated Ġmethod Ġbecause Ġnew Ġway Ġis Ġrequired Ġlevel Ġis Ġtoo Ġhigh ( android Ġ 1 1 ) ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġadd St icker ( src : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġdisplay Metrics Ġ= ĠDisplay Metrics () ĊĠĠĠĠĠĠĠ Ġwindow Manager . default Display . get Metrics ( display Metrics ) ĊĠĠĠĠĠĠĠ Ġvar Ġx : ĠDouble ? Ġ= Ġ 0 . 0 ĊĠĠĠĠĠĠĠ Ġvar Ġy : ĠDouble ? Ġ= Ġ 0 . 0 ĊĠĠĠĠĠĠĠ Ġvar Ġst icker Bitmap Ġ= ĠBitmap Factory . decode Resource ( resources , Ġsrc ) ĊĠĠĠĠĠĠĠ Ġvar Ġst icker Ġ= ĠImageView ( this ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset X (( display Metrics . width Pixels / 2 ). toFloat ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Y (( display Metrics . height Pixels / 2 ). toFloat ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Image Bitmap ( st icker Bitmap ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset BackgroundColor ( Color . TRANSP ARENT ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset On Touch Listener Ġ{ Ġview , Ġevent Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( event . action ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Event . ACTION _ DOWN Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx Ġ= Ġview . x . toDouble () Ġ- Ġevent . raw X ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġy Ġ= Ġview . y . toDouble () Ġ- Ġevent . raw Y ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Event . ACTION _ MOVE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . animate () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. x ( event . raw X Ġ+ Ġx !!. toFloat ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. y ( event . raw Y Ġ+ Ġy !!. toFloat ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Duration ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. start () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġstick ers ?. add ( st icker ) ĊĠĠĠĠĠĠĠ Ġgallery _ st icker _ layout . addView ( st icker ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġadd St icker ( bitmap : ĠBitmap ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġx : ĠDouble ? Ġ= Ġ 0 . 0 ĊĠĠĠĠĠĠĠ Ġvar Ġy : ĠDouble ? Ġ= Ġ 0 . 0 ĊĠĠĠĠĠĠĠ Ġvar Ġst icker Ġ= ĠImageView ( this ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Image Bitmap ( bitmap ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset BackgroundColor ( Color . TRANSP ARENT ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset On Touch Listener Ġ{ Ġview , Ġevent Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( event . action ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Event . ACTION _ DOWN Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx Ġ= Ġview . x . toDouble () Ġ- Ġevent . raw X ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġy Ġ= Ġview . y . toDouble () Ġ- Ġevent . raw Y ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Event . ACTION _ MOVE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . animate () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. x ( event . raw X Ġ+ Ġx !!. toFloat ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. y ( event . raw Y Ġ+ Ġy !!. toFloat ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Duration ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. start () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġstick ers ?. add ( st icker ) ĊĠĠĠĠĠĠĠ Ġgallery _ st icker _ layout . addView ( st icker ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġadd St icker Button In Runtime ( image Uri : ĠUri ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsrc Ġ= ĠImage Decoder . create Source ( this . content Resolver , Ġimage Uri ) ĊĠĠĠĠĠĠĠ Ġval Ġbitmap Ġ= ĠImage Decoder . decode Bitmap ( src ) ĊĊĠĠĠĠĠĠĠ Ġval Ġimage Ġ= ĠBitmap . create Scaled Bitmap ( bitmap , Ġbitmap . width , Ġbitmap . height , Ġfalse ) ĊĊĠĠĠĠĠĠĠ Ġvar Ġst icker Button Ġ= ĠImage Button ( this ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= ĠView . generate View Id () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Image Bitmap ( image ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset BackgroundColor ( Color . TRANSP ARENT ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscale Type Ġ= ĠImageView . Scale Type . FIT _ CENTER ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Params Ġ= ĠConstraint Layout . LayoutParams ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdp To Pixel ( 6 4 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdp To Pixel ( 6 4 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . margin Start Ġ= Ġ 5 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġset OnClickListener Ġ{ Ġadd St icker ( image ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġconstraint Set Ġ= ĠConstraint Set () ĊĊĠĠĠĠĠĠĠ Ġgallery _ st icker _ layout . addView ( st icker Button ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( st icker Buttons !!. size Ġ>= Ġ 5 ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġst icker Buttons !!. remove At ( st icker Buttons !!. last Index ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġconstraint Set . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclone ( gallery _ st icker _ layout ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconnect ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġst icker Button . id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠConstraint Set . START , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġst icker Buttons ?. get ( st icker Buttons !!. last Index ) !!. id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠConstraint Set . END ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconnect ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġst icker Button . id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠConstraint Set . TOP , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgallery _ st icker _ add Button _ top Guide line . id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠConstraint Set . BOTTOM ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconnect ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġst icker Button . id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠConstraint Set . BOTTOM , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgallery _ st icker _ add Button _ bottom Guide line . id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠConstraint Set . TOP ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ}. run Ġ{ Ġapply To ( gallery _ st icker _ layout ) Ġ} ĊĠĠĠĠĠĠĠ Ġst icker Buttons ?. add ( st icker Button ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġprivate Ġfun Ġdp To Pixel ( size Ġ: ĠInt ): Int { ĊĠĠĠĠĠĠĠ Ġval Ġscale Ġ= Ġresources . display Metrics . density ĊĠĠĠĠĠĠĠ Ġreturn Ġ( size * scale ). toInt () ĊĠĠĠ Ġ} Ċ } Ċ