package Ġcn . l vs ong . lib . library . top menu Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics . Rect F Ċ import Ġandroid . util . Attribute Set Ċ import Ġandroid . util . Typed Value Ċ import Ġandroidx . annotation . Color Int Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġcn . l vs ong . lib . library . R Ċ import Ġcn . l vs ong . lib . library . bubble . Bubble Drawable Ċ Ċ /** Ċ Ġ* ĠCreated Ġby ĠJ oo yer Ġon Ġ 2 0 1 7 / 3 / 1 9 Ċ Ġ* Ġ æ³¨æĦı , è®¾ç½® android : padding xxx æĺ¯ æĹł æķĪ çļĦ , Ġåıª èĥ½ è®¾ç½® Ġbr v _ padding _ top Ċ Ġ*/ Ċ Ċ /* Ġxml ä¸Ń çĶ¨ æ³ķ å¦Ĥä¸ĭ Ċ Ċ < cn . l vs ong . lib . library . top menu . Bubble RecyclerView Ċ Ġxmlns : android =" http :// schemas . android . com / apk / res / android " ĊĠĠĠ Ġxmlns : app =" http :// schemas . android . com / apk / res - auto " ĊĠĠĠ Ġxmlns : tools =" http :// schemas . android . com / tools " ĊĠĠĠ Ġandroid : id ="@ + id / rv _ menu _ publish _ dynamic " ĊĠĠĠ Ġandroid : layout _ width =" match _ parent " ĊĠĠĠ Ġandroid : layout _ height =" match _ parent " ĊĠĠĠ Ġapp : br v _ around _ radius ="@ dim en / padding _ 1 0 " ĊĠĠĠ Ġapp : br v _ arrow _ height ="@ dim en / padding _ 8 " ĊĠĠĠ Ġapp : br v _ arrow _ offset ="@ dim en / padding _ 1 2 " ĊĠĠĠ Ġapp : br v _ arrow _ width ="@ dim en / padding _ 8 " ĊĠĠĠ Ġapp : br v _ bubble _ color ="@ color / color _ E 8 9 9 4 3 " ĊĠĠĠ Ġapp : br v _ top _ padding ="@ dim en / padding _ 8 " ĊĠĠĠ Ġtools : list item ="@ layout / left _ img _ right _ text _ view " Ġ/> ĊĊ Ġ*/ Ċ Ċ class ĠB ubble RecyclerView ( context : ĠContext , Ġattrs : ĠAttributeSet ?) Ġ: ĠRecyclerView ( context , Ġattrs ) Ġ{ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ ç® Ń å¤´ å®½åº¦ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġvar Ġm Arrow Width Ġ= Ġ 0 F ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ åĽĽ åĳ¨ åľĨ è§Ĵ å¤§å°ı ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġvar Ġm Around Radius Ġ= Ġ 0 F ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ ç® Ń å¤´ é«ĺåº¦ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġvar Ġm Arrow Height Ġ= Ġ 0 F ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ ç® Ń å¤´ åģı ç§» è·Ŀç¦» ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġvar Ġm Arrow Offset Ġ= Ġ 0 F ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ èĥĮæĻ¯ èī² ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġvar Ġm Bubble Color : ĠInt Ġ= Ġ 0 ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ æİ§ä»¶ é¡¶ éĥ¨ åĨħ è¾¹ è·Ŀ , åĽłä¸º æľī ç® Ń å¤´ , æīĢä»¥ éľĢè¦ģ ç»Ļ ä¸Ģä¸ª åĨħ è¾¹ è·Ŀ , å°Ĩ åĨħéĥ¨ Item æĮ ¤ ä¸ĭ æĿ¥ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġvar Ġm Padding Top : ĠInt Ġ= Ġ 0 ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ ç® Ń å¤´ æĺ¯åĲ¦ å±ħ ä¸Ń ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġvar Ġm Arrow Center : ĠBoolean Ġ= Ġfalse ĊĊĠĠĠ Ġconstructor ( context : ĠContext ) Ġ: Ġthis ( context , Ġnull ) ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġattrs ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġarray Ġ= Ġcontext . obtain Styled Attributes ( attrs , ĠR . style able . Bubble RecyclerView ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Arrow Width Ġ= Ġarray . get Dimension ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . style able . Bubble RecyclerView _ br v _ arrow _ width , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠB ubble Drawable . Builder . DEFAULT _ ARROW _ WITH ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Arrow Height Ġ= Ġarray . get Dimension ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . style able . Bubble RecyclerView _ br v _ arrow _ height , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠB ubble Drawable . Builder . DEFAULT _ ARROW _ HEIGHT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Around Radius Ġ= Ġarray . get Dimension ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . style able . Bubble RecyclerView _ br v _ around _ radius , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠB ubble Drawable . Builder . DEFAULT _ ANGLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Arrow Offset Ġ= Ġarray . get Dimension ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . style able . Bubble RecyclerView _ br v _ arrow _ offset , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠB ubble Drawable . Builder . DEFAULT _ ARROW _ POSITION ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Bubble Color Ġ= Ġarray . getColor ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . style able . Bubble RecyclerView _ br v _ bubble _ color , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠB ubble Drawable . Builder . DEFAULT _ BU BB LE _ COLOR ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Padding Top Ġ= Ġarray . get Dimension Pixel Size ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . style able . Bubble RecyclerView _ br v _ top _ padding , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdp 2 px ( 1 0 F ). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Arrow Center Ġ= Ġarray . getBoolean ( R . style able . Bubble RecyclerView _ br v _ arrow _ center , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Padding ( 0 , Ġm Padding Top , Ġ 0 , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġarray . recycle () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Layout ( changed : ĠBoolean , Ġl : ĠInt , Ġt : ĠInt , Ġr : ĠInt , Ġb : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Layout ( changed , Ġl , Ġt , Ġr , Ġb ) ĊĠĠĠĠĠĠĠ Ġif Ġ( r Ġ- Ġl Ġ> Ġ 0 Ġ&& Ġb Ġ- Ġt Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠsetUp ( r Ġ- Ġl , Ġb Ġ- Ġt ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun ĠsetUp ( left : ĠInt , Ġright : ĠInt , Ġtop : ĠInt , Ġbottom : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( right Ġ< Ġleft Ġ|| Ġbottom Ġ< Ġtop ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġval Ġrect F Ġ= ĠRect F ( left . toFloat (), Ġ 0 F , Ġright . toFloat (), Ġbottom . toFloat ()) ĊĠĠĠĠĠĠĠ Ġbackground Ġ= ĠB ubble Drawable . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. rect ( rect F ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. arrow Location ( Bubble Drawable . Arrow Location . TOP _ RIGHT ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. around Radius ( m Around Radius ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. arrow Height ( m Arrow Height ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. arrow Width ( m Arrow Width ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. arrow Position ( m Arrow Offset ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. bubble Color ( m Bubble Color ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. arrow Center ( m Arrow Center ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠsetUp ( width : ĠInt , Ġheight : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ ĠsetUp ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpadding Left , Ġwidth Ġ- Ġpadding Right , ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 , Ġheight Ġ- Ġpadding Bottom ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġè®¾ç½® åĽĽ åĳ¨ åľĨ è§Ĵ å¤§å°ı ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset Around Radius ( around Radius : ĠFloat ): ĠB ubble RecyclerView Ġ{ ĊĠĠĠĠĠĠĠ Ġm Around Radius Ġ= Ġaround Radius ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġè®¾ç½® ç® Ń å¤´ é«ĺåº¦ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset Arrow Height ( arrow Height : ĠFloat ): ĠB ubble RecyclerView Ġ{ ĊĠĠĠĠĠĠĠ Ġm Arrow Height Ġ= Ġarrow Height ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġè®¾ç½® ç® Ń å¤´ åģı ç§» éĩı ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset Arrow Offset ( offset : ĠFloat ): ĠB ubble RecyclerView Ġ{ ĊĠĠĠĠĠĠĠ Ġm Arrow Offset Ġ= Ġoffset ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġè®¾ç½® ç® Ń å¤´ å®½åº¦ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset Arrow Width ( arrow Width : ĠFloat ): ĠB ubble RecyclerView Ġ{ ĊĠĠĠĠĠĠĠ Ġm Arrow Width Ġ= Ġarrow Width ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġè®¾ç½® ç® Ń å¤´ æĺ¯åĲ¦ åľ¨ ä¸Ńå¿ĥ ä½įç½® ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset Arrow Center ( arrow Center : ĠBoolean ): ĠB ubble RecyclerView Ġ{ ĊĠĠĠĠĠĠĠ Ġm Arrow Center Ġ= Ġarrow Center ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġè®¾ç½® Bubble é¢ľèī² ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset Bubble Color (@ Color Int Ġbubble Color : ĠInt ): ĠB ubble RecyclerView Ġ{ ĊĠĠĠĠĠĠĠ Ġm Bubble Color Ġ= Ġbubble Color ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġè®¾ç½® æİ§ä»¶ é¡¶ éĥ¨ åĨħ è¾¹ è·Ŀ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset Padding Top ( padding Top : ĠInt ): ĠB ubble RecyclerView Ġ{ ĊĠĠĠĠĠĠĠ Ġm Padding Top Ġ= Ġpadding Top ĊĠĠĠĠĠĠĠ Ġset Padding ( 0 , Ġm Padding Top , Ġ 0 , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġæ¸ ħ éĻ¤ èĥĮæĻ¯ èī² ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun ĠsetUp Bubble Drawable () Ġ{ ĊĠĠĠĠĠĠĠ Ġbackground Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġpost Ġ{ ĠsetUp ( width , Ġheight ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Not Available Size () Ġ= ĊĠĠĠĠĠĠĠ Ġ( m Padding Top Ġ+ Ġif Ġ( m Arrow Width Ġ> Ġm Arrow Height ) Ġm Arrow Width Ġelse Ġm Arrow Height ). toInt () ĊĊĠĠĠ Ġprivate Ġfun Ġdp 2 px ( def : ĠFloat ): ĠFloat Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠTyped Value . apply Dimension ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTyped Value . COMPLEX _ UNIT _ DIP , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdef , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . resources . display Metrics ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ }