package Ġcom . m izz ugi . ken si ro . app . pan ri . adapter Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics . Point Ċ import Ġandroid . view . Gravity Ċ import Ġandroid . view . View Ċ import Ġandroid . widget . ImageView Ċ import Ġandroid . widget . LinearLayout Ċ import Ġandroidx . annotation . Px Ċ import Ġcom . bump tech . glide . G lide Ċ import Ġcom . bump tech . glide . request . RequestOptions Ċ import Ġjava . io . File Ċ import Ġkotlin . math . round ToInt Ċ Ċ class ĠImage GridView Adapter ( ĊĠĠĠ Ġcontext : ĠContext , ĊĠĠĠ Ġprivate Ġval Ġreq Size : ĠPoint , ĊĠĠĠ Ġprivate Ġval Ġimage DirPath : ĠFile , ĊĠĠĠ Ġprivate Ġval Ġroot Element : ĠLinearLayout Ċ ) Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġlist Location Res Images : ĠList < Int > Ġ= Ġmutable ListOf () ĊĠĠĠ Ġprivate Ġvar Ġlist Location Assets Images : ĠList < String > Ġ= Ġmutable ListOf () ĊĠĠĠ Ġprivate Ġvar Ġimage Item Size : ĠPoint Ġ= ĠPoint ( 0 , Ġ 0 ) ĊĠĠĠ Ġprivate Ġvar Ġctx : ĠContext Ġ= Ġcontext ĊĠĠĠ Ġvar Ġcolumn Count Ġ= Ġ 2 ĊĠĠĠ Ġprivate Ġvar Ġrow Count : ĠInt Ġ= Ġ 0 ĊĠĠĠ Ġvar Ġon ItemClickListener : ĠOn ItemClickListener ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġvar ĠmarginTop Ġ= Ġ 2 0 ĊĠĠĠ Ġprivate Ġvar ĠmarginBottom Ġ= Ġ 2 0 ĊĠĠĠ Ġprivate Ġvar ĠmarginLeft Ġ= Ġ 1 5 ĊĠĠĠ Ġprivate Ġvar ĠmarginRight Ġ= Ġ 1 5 ĊĠĠĠ Ġprivate Ġvar Ġmargin Center Ġ= Ġ 1 5 ĊĠĠĠ Ġprivate Ġvar Ġmode Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġid Suffix : ĠString ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġcontent Padding Ġ= Ġ 0 ĊĊĠĠĠ Ġprivate Ġval Ġitem Count : ĠInt ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( mode Ġ== Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlist Location Res Images . size ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlist Location Assets Images . size ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Margin (@ Px ĠmarginTop : ĠInt , Ġ@ Px ĠmarginBottom : ĠInt , Ġ@ Px ĠmarginLeft : ĠInt , Ġ@ Px ĠmarginRight : ĠInt , Ġ@ Px Ġmargin Center : ĠInt , Ġ@ Px Ġcontent Padding : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . margin Bottom Ġ= ĠmarginBottom ĊĠĠĠĠĠĠĠ Ġthis . margin Top Ġ= ĠmarginTop ĊĠĠĠĠĠĠĠ Ġthis . margin Left Ġ= ĠmarginLeft ĊĠĠĠĠĠĠĠ Ġthis . margin Right Ġ= ĠmarginRight ĊĠĠĠĠĠĠĠ Ġthis . margin Center Ġ= Ġmargin Center ĊĠĠĠĠĠĠĠ Ġthis . content Padding Ġ= Ġcontent Padding ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset List Location File Images ( list Location File Images : ĠList < String >, Ġid Suffix : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// root Element . removeAll Views () ĊĠĠĠĠĠĠĠ Ġthis . list Location Assets Images Ġ= Ġlist Location File Images ĊĠĠĠĠĠĠĠ Ġthis . id Suffix Ġ= Ġid Suffix ĊĠĠĠĠĠĠĠ Ġmode Ġ= Ġ 2 ĊĠĠĠĠĠĠĠ ĠSystem . gc () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset List Location Assets Images ( list Location Assets Images : ĠList < String >, Ġid Suffix : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . list Location Assets Images Ġ= Ġlist Location Assets Images ĊĠĠĠĠĠĠĠ Ġthis . id Suffix Ġ= Ġid Suffix ĊĠĠĠĠĠĠĠ Ġmode Ġ= Ġ 1 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset List Location Res Images ( list Location Res Images : ĠList < Int >, Ġid Suffix : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . list Location Res Images Ġ= Ġlist Location Res Images ĊĠĠĠĠĠĠĠ Ġthis . id Suffix Ġ= Ġid Suffix ĊĠĠĠĠĠĠĠ Ġmode Ġ= Ġ 0 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Image Per Item Height ( new Height : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġimage Item Size . y Ġ= Ġnew Height ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġbuild And Show () Ġ{ ĊĠĠĠĠĠĠĠ Ġprepare () ĊĠĠĠĠĠĠĠ Ġbuild Content Layout () ĊĠĠĠĠĠĠĠ Ġ// new ĠTask Loading Bitmap ( this ). execute On Executor ( AsyncTask . THREAD _ POOL _ EXECUT OR ); ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġprepare () Ġ{ ĊĠĠĠĠĠĠĠ Ġimage Item Size . x Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreq Size . x Ġ/ Ġcolumn Count Ġ- Ġ( margin Left Ġ+ ĠmarginRight Ġ/ Ġcolumn Count ) Ġ- Ġcontent Padding ĊĠĠĠĠĠĠĠ Ġimage Item Size . y Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( image Item Size . y Ġ== Ġ 0 ) Ġimage Item Size . x ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġimage Item Size . y ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġbuild Content Layout () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġgets Ġthe Ġrow Ġcount ĊĠĠĠĠĠĠĠ Ġrow Count Ġ= Ġ( item Count Ġ/ Ġcolumn Count ). toFloat (). round ToInt () ĊĊĠĠĠĠĠĠĠ Ġvar Ġitems Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġfor Ġ( x Ġin Ġ 0 Ġuntil Ġrow Count ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġelement Ġ= ĠLinearLayout ( ctx ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Params Ġ= ĠLinearLayout . LayoutParams ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLinearLayout . LayoutParams . MATCH _ PARENT , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLinearLayout . LayoutParams . WRAP _ CONTENT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( x Ġ+ Ġ 1 Ġ== Ġrow Count ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . set Margins ( 0 , ĠmarginTop , Ġ 0 , ĠmarginBottom ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . set Margins ( 0 , ĠmarginTop , Ġ 0 , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgravity Ġ= ĠGr avity . CENTER ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( y Ġin Ġ 0 Ġuntil Ġcolumn Count ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġimg Ġ= ĠImageView ( ctx ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Params Ġ= ĠLinearLayout . LayoutParams ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimage Item Size . x , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimage Item Size . y ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcolumn Count Ġ> Ġ 1 Ġ&& Ġy Ġ+ Ġ 1 Ġ== Ġcolumn Count Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . right Margin Ġ= ĠmarginRight ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . left Margin Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcolumn Count Ġ> Ġ 1 Ġ&& Ġy Ġ< Ġcolumn Count Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( y Ġ== Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . left Margin Ġ= ĠmarginLeft ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . left Margin Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . right Margin Ġ= Ġmargin Center ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . right Margin Ġ= ĠmarginRight ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . left Margin Ġ= ĠmarginLeft ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠmaxHeight Ġ= Ġimage Item Size . y ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠmaxWidth Ġ= Ġimage Item Size . x ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscale Type Ġ= ĠImageView . Scale Type . FIT _ XY ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadjust View Bounds Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapply Images ( this , Ġitems ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġin Items Ġ= Ġitems ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset OnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon ItemClickListener ?. on Item Click ( it , Ġin Items ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelement . addView ( img ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġroot Element . addView ( element ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġapply Images ( imageView : ĠImageView , Ġitems : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( mode ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠ 2 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfile Ġ= ĠFile ( image DirPath , Ġlist Location Assets Images [ items ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠG lide . with ( ctx ). load ( file ). apply ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRequest Options (). override ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimage Item Size . x , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimage Item Size . y ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). encode Quality ( 9 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). into ( imageView ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġbuild Root Layout () Ġ{ ĊĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġinterface ĠOn ItemClickListener Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġon Item Click ( v : ĠView , Ġposition : ĠInt ) ĊĠĠĠ Ġ} Ċ }