package Ġcom . android . record . popup window Ċ Ċ import Ġandroid . app . Activity Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics . drawable . Color Drawable Ċ import Ġandroid . graphics . drawable . Drawable Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . widget . Popup Window Ċ import Ġandroidx . annotation . Float Range Ċ import Ġcom . android . record . utils . ViewHolder Ċ Ċ /** Ċ Ġ* Ġ@ author : Ġch en _ k ai Ċ Ġ* Ġ@ date : Ġ 2 0 2 1 / 8 / 8 Ċ Ġ* Ġ@ desc : Ġ éĢļ çĶ¨çļĦ Popup Window Ċ Ġ*/ Ċ class ĠCommon Popup Window Ġconstructor ( context : ĠContext ) Ġ: ĠPopup Window () Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġm Window Helper : ĠWindow Helper ? Ġ= Ġnull ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( context Ġis ĠActivity ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Window Helper Ġ= ĠWindow Helper ( context ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdismiss () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . dismiss () ĊĠĠĠĠĠĠĠ Ġm Window Helper ?. set Back Ground Alpha ( 1 . 0 f ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġé»ĺè®¤ éĿĻæĢģ åĨħéĥ¨ ç±» ï¼Į å¦Ĥæŀľ åĬł ä¸Ĭ inner ï¼Į åį³ inner Ġclass åĪĻ æĺ¯ éĿŀ éĿĻæĢģ åĨħéĥ¨ ç±» ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġclass ĠBuilder ( private Ġvar ĠmContext : ĠContext ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* Ġ å¼¹ çªĹ çļĦ å¸ĥå±Ģ id ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġm Layout Id : ĠInt Ġ= Ġ- 1 ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* Ġ å¼¹ çªĹ çļĦ å®½åº¦ ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġm Width : ĠInt Ġ= Ġ 0 ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* Ġ å¼¹ çªĹ çļĦ é«ĺåº¦ ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġm Height : ĠInt Ġ= Ġ 0 ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* èĥĮæĻ¯ éĢı æĺİ åº¦ ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġm Alpha : ĠFloat Ġ= Ġ 1 . 0 f ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* Ġ åĬ¨çĶ» ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġm Animation Style : ĠInt Ġ= Ġ- 1 ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* Ġæĺ¯åĲ¦ åı¯ çĤ¹åĩ» ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġm Touchable : ĠBoolean Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* Ġ èĥĮæĻ¯ drawable ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġm Background Drawable : ĠDrawable Ġ= ĠColor Drawable ( 0 x 0 0 0 0 0 0 0 0 ) ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* Ġ çĤ¹åĩ» äºĭä»¶ ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġm On View Listener : Ġ(( holder : ĠViewHolder , Ġpopup Window : ĠPopup Window ) Ġ-> ĠUnit )? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠéĢļè¿ĩ å¸ĥå±Ģ id è®¾ç½® å¼¹ çªĹ å¸ĥå±Ģ çļĦ View ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun ĠsetContentView ( layout Id : ĠInt ): ĠBuilder Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Layout Id Ġ= Ġlayout Id ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* Ġè®¾ç½® å®½ é«ĺ ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġset View Params ( width : ĠInt , Ġheight : ĠInt ): ĠBuilder Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Width Ġ= Ġwidth ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Height Ġ= Ġheight ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* Ġè®¾ç½® å¤ĸéĥ¨ åĮºåŁŁ èĥĮæĻ¯ éĢı æĺİ åº¦ ï¼Į 0 ï¼ļ å®Įåħ¨ ä¸į éĢı æĺİ ï¼Į 1 ï¼ļ å®Įåħ¨ éĢı æĺİ ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġset Back Ground Alpha (@ Float Range ( from Ġ= Ġ 0 . 0 , Ġto Ġ= Ġ 1 . 0 ) Ġalpha : ĠFloat ): ĠBuilder Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Alpha Ġ= Ġalpha ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* Ġè®¾ç½® æĺ¾ç¤º åĴĮ æ¶Ī å¤± åĬ¨çĶ» ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġset Animation Style ( animation Style : ĠInt ): ĠBuilder Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Animation Style Ġ= Ġanimation Style ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* Ġè®¾ç½® å¤ĸéĥ¨ åĮºåŁŁ æĺ¯åĲ¦ åı¯ çĤ¹åĩ» åıĸæ¶Ī å¯¹ è¯Ŀ æ¡Ĩ ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġset Outside Touchable ( touch able : ĠBoolean ): ĠBuilder Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Touchable Ġ= Ġtouch able ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* Ġè®¾ç½® å¼¹ çªĹ èĥĮæĻ¯ ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġset Background Drawable ( drawable : ĠDrawable ): ĠBuilder Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Background Drawable Ġ= Ġdrawable ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* Ġè®¾ç½® äºĭä»¶ çĽĳåĲ¬ ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġset On View Listener ( listener : Ġ( holder : ĠViewHolder , Ġpopup Window : ĠPopup Window ) Ġ-> ĠUnit ): ĠBuilder Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm On View Listener Ġ= Ġlistener ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġbuild (): ĠCommon Popup Window Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpopup Window Ġ= ĠCommon Popup Window ( mContext ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith ( popup Window ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// è®¾ç½® content View ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Layout Id Ġ!= Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġview Ġ= ĠLayoutInflater . from ( mContext ). inflate ( m Layout Id , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ åĽłä¸º Popup Window åľ¨ æĺ¾ç¤º åīį æĹłæ³ķ èİ·åıĸ åĩĨ ç¡® çļĦ å®½ é«ĺ åĢ¼ ( getWidth åĴĮ getHeight åı¯èĥ½ä¼ļ è¿ĶåĽŀ 0 æĪĸ - 2 ï¼īï¼Į ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠéĢļè¿ĩ æıĲ åīį æµĭ éĩı content View çļĦ å®½ é«ĺ å°±åı¯ä»¥ éĢļè¿ĩ get Measured Width åĴĮ get Measured Height èİ·åıĸ content View çļĦ å®½ é«ĺ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . measure ( View . Measure Spec . UNSPECIFIED , ĠView . Measure Spec . UNSPECIFIED ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent View Ġ= Ġview ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠNullPointerException (" The Ġcontent View Ġof ĠPopup Window Ġis Ġnull ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġè®¾ç½® å®½ é«ĺ ï¼Į æ²¡æľī è®¾ç½® å®½ é«ĺ çļĦè¯Ŀ é»ĺè®¤ä¸º ViewGroup . LayoutParams . WRAP _ CONTENT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwidth Ġ= Ġif Ġ( m Width Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠViewGroup . LayoutParams . WRAP _ CONTENT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Width ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheight Ġ= Ġif Ġ( m Height Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠViewGroup . LayoutParams . WRAP _ CONTENT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Height ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġè®¾ç½® å¤ĸéĥ¨ åĮºåŁŁ çļĦ éĢı æĺİ åº¦ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Window Helper ?. set Back Ground Alpha ( m Alpha ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġè®¾ç½® å¼¹ çªĹ æĺ¾ç¤º åĴĮ æ¶Ī å¤± çļĦ åĬ¨çĶ» æķĪæŀľ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Animation Style Ġ!= Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġanimation Style Ġ= Ġm Animation Style ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġè®¾ç½® å¼¹ çªĹ èĥĮæĻ¯ ï¼Į å¦Ĥæŀľ content View å¯¹åºĶçļĦ View å·²ç»ı è®¾ç½® android : background åı¯èĥ½ä¼ļ è¦ĨçĽĸ å¼¹ çªĹ èĥĮæĻ¯ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Background Drawable ( m Background Drawable ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġè®¾ç½® çĤ¹åĩ» å¤ĸéĥ¨ åĮºåŁŁ æĺ¯åĲ¦ åı¯ åıĸæ¶Ī å¼¹ çªĹ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Outside Touchable Ġ= Ġm Touchable ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Focus able Ġ= Ġm Touchable ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġè®¾ç½® content View ä¸Ĭ æİ§ä»¶ çļĦ äºĭä»¶ çĽĳåĲ¬ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm On View Listener ?. invoke ( ViewHolder ( content View ), Ġthis ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġpopup Window ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} Ċ Ċ }