package Ġcom . h jq . widget . view Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . res . Typed Array Ċ import Ġandroid . graphics . Canvas Ċ import Ġandroid . graphics . Rect Ċ import Ġandroid . graphics . drawable . Drawable Ċ import Ġandroid . util . Attribute Set Ċ import Ġandroid . view . Motion Event Ċ import Ġandroid . view . View Ċ import Ġandroidx . annotation . Drawable Res Ċ import Ġandroidx . core . content . Context Compat Ċ import Ġcom . h jq . widget . R Ċ import Ġkotlin . math . max Ċ import Ġkotlin . math . min Ċ Ċ /** Ċ Ġ* ĠĠĠ Ġauthor Ġ: ĠAndroid Ġ è½® åŃĲ åĵ ¥ Ċ Ġ* ĠĠĠ Ġgithub Ġ: Ġhttps :// github . com / getActivity / Android Project - Kotlin Ċ Ġ* ĠĠĠ Ġtime ĠĠ Ġ: Ġ 2 0 2 1 / 0 7 / 1 1 Ċ Ġ* ĠĠĠ Ġdesc ĠĠ Ġ: Ġ èĩªå®ļä¹ī è¯Ħ åĪĨ æİ§ä»¶ ï¼Ī ç³»ç»Ł çļĦ ĠRating Bar Ġä¸į å¥½ çĶ¨ ï¼ī Ċ Ġ*/ Ċ class ĠSimple Rating Bar Ġ@ Jvm Over loads Ġconstructor ( ĊĠĠĠ Ġcontext : ĠContext , Ġattrs : ĠAttributeSet ? Ġ= Ġnull , Ġdef Style Attr : ĠInt Ġ= Ġ 0 ) Ġ: ĊĠĠĠ ĠView ( context , Ġattrs , Ġdef Style Attr ) Ġ{ ĊĊĠĠĠ Ġ/** Ġé»ĺè®¤ çļĦ æĺŁ æĺŁ åĽ¾ æłĩ Ġ*/ ĊĠĠĠ Ġprivate Ġvar Ġnormal Drawable : ĠDrawable ĊĊĠĠĠ Ġ/** Ġ éĢī ä¸ŃçļĦ æĺŁ æĺŁ åĽ¾ æłĩ Ġ*/ ĊĠĠĠ Ġprivate Ġvar Ġfill Drawable : ĠDrawable ĊĊĠĠĠ Ġ/** Ġ éĢī ä¸ŃçļĦ åįĬ æĺŁ åĽ¾ æłĩ Ġ*/ ĊĠĠĠ Ġprivate Ġvar Ġhalf Drawable : ĠDrawable ? ĊĊĠĠĠ Ġ/** Ġå½ĵåīį æĺŁ çŃī çº§ Ġ*/ ĊĠĠĠ Ġprivate Ġvar Ġcurrent Grade : ĠFloat ĊĊĠĠĠ Ġ/** Ġ æĺŁ æĺŁ æĢ» æķ°éĩı Ġ*/ ĊĠĠĠ Ġprivate Ġvar Ġgrade Count : ĠInt ĊĊĠĠĠ Ġ/** Ġ æĺŁ æĺŁ çļĦ å®½åº¦ Ġ*/ ĊĠĠĠ Ġprivate Ġvar Ġgrade Width : ĠInt ĊĊĠĠĠ Ġ/** Ġ æĺŁ æĺŁ çļĦ é«ĺåº¦ Ġ*/ ĊĠĠĠ Ġprivate Ġvar Ġgrade Height : ĠInt ĊĊĠĠĠ Ġ/** Ġ æĺŁ æĺŁ ä¹ĭéĹ´çļĦ éĹ´ éļĶ Ġ*/ ĊĠĠĠ Ġprivate Ġvar Ġgrade Space : ĠInt ĊĊĠĠĠ Ġ/** Ġ æĺŁ æĺŁ éĢīæĭ© è·¨ åº¦ Ġ*/ ĊĠĠĠ Ġprivate Ġvar Ġgrade Step : ĠGradle Step ? Ġ= Ġnull ĊĊĠĠĠ Ġ/** Ġ æĺŁ æĺŁ åıĺåĮĸ çĽĳåĲ¬ äºĭä»¶ Ġ*/ ĊĠĠĠ Ġprivate Ġvar Ġlistener : ĠOn Rating ChangeListener ? Ġ= Ġnull ĊĊĠĠĠ Ġ/** Ġ æĺŁ æĺŁ ä½įç½® è®°å½ķ Ġ*/ ĊĠĠĠ Ġprivate Ġval Ġgrade Bounds : ĠRect Ġ= ĠRect () ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġarray : ĠTyped Array Ġ= Ġcontext . obtain Styled Attributes ( attrs , ĠR . style able . Simple Rating Bar ) ĊĠĠĠĠĠĠĠ Ġnormal Drawable Ġ= ĠContext Compat . get Drawable ( getContext (), Ġarray . getResource Id ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . style able . Simple Rating Bar _ normal Drawable , ĠR . drawable . rating _ star _ off _ ic )) !! ĊĠĠĠĠĠĠĠ Ġhalf Drawable Ġ= ĠContext Compat . get Drawable ( getContext (), Ġarray . getResource Id ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . style able . Simple Rating Bar _ half Drawable , ĠR . drawable . rating _ star _ half _ ic )) ĊĠĠĠĠĠĠĠ Ġfill Drawable Ġ= ĠContext Compat . get Drawable ( getContext (), Ġarray . getResource Id ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . style able . Simple Rating Bar _ fill Drawable , ĠR . drawable . rating _ star _ fill _ ic )) !! ĊĊĠĠĠĠĠĠĠ Ġ// Ġ ä¸¤ å¼ł åĽ¾çīĩ çļĦ å®½ é«ĺ ä¸į ä¸Ģèĩ´ ĊĠĠĠĠĠĠĠ Ġif Ġ(( normal Drawable . intrinsic Width Ġ!= Ġfill Drawable . intrinsic Width ) Ġ|| Ġ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnormal Drawable . intrinsic Width Ġ!= Ġhalf Drawable ?. intrinsic Width ) Ġ|| Ġ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnormal Drawable . intrinsic Height Ġ!= Ġfill Drawable . intrinsic Height ) Ġ|| Ġ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnormal Drawable . intrinsic Height Ġ!= Ġhalf Drawable ?. intrinsic Height )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException (" The Ġwidth Ġand Ġheight Ġof Ġthe Ġpicture Ġdo Ġnot Ġagree ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcurrent Grade Ġ= Ġarray . get Float ( R . style able . Simple Rating Bar _ grade , Ġ 0 f ) ĊĠĠĠĠĠĠĠ Ġgrade Count Ġ= Ġarray . getInt ( R . style able . Simple Rating Bar _ grade Count , Ġ 5 ) ĊĠĠĠĠĠĠĠ Ġgrade Width Ġ= Ġarray . get Dimension Pixel Size ( R . style able . Simple Rating Bar _ grade Width , Ġnormal Drawable . intrinsic Width ) ĊĠĠĠĠĠĠĠ Ġgrade Height Ġ= Ġarray . get Dimension Pixel Size ( R . style able . Simple Rating Bar _ grade Height , Ġfill Drawable . intrinsic Height ) ĊĠĠĠĠĠĠĠ Ġgrade Space Ġ= Ġarray . get Dimension ( R . style able . Simple Rating Bar _ grade Space , Ġgrade Width Ġ/ Ġ 4 f ). toInt () ĊĠĠĠĠĠĠĠ Ġgrade Step Ġ= Ġwhen Ġ( array . getInt ( R . style able . Simple Rating Bar _ grade Step , Ġ 0 )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 0 1 Ġ-> ĠGradle Step . ONE ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 0 0 Ġ-> ĠGradle Step . HALF ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠGradle Step . HALF ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġarray . recycle () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Measure ( width Measure Spec : ĠInt , Ġheight Measure Spec : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmeasured Width : ĠInt Ġ= Ġ( grade Width Ġ* Ġgrade Count ) Ġ+ Ġ( grade Space Ġ* Ġ( grade Count Ġ+ Ġ 1 )) ĊĠĠĠĠĠĠĠ Ġval Ġmeasured Height : ĠInt Ġ= Ġgrade Height ĊĠĠĠĠĠĠĠ Ġset Measured Dimension ( meas ured Width Ġ+ Ġpadding Left Ġ+ Ġpadding Right , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmeasured Height Ġ+ Ġpadding Top Ġ+ Ġpadding Bottom ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress (" Click ableView Accessibility ") ĊĠĠĠ Ġoverride Ġfun Ġon Touch Event ( event : ĠMotion Event ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġå¦Ĥæŀľ æİ§ä»¶ å¤Ħ äºİ ä¸įåı¯ çĶ¨ çĬ¶æĢģ ï¼Į çĽ´æİ¥ ä¸į å¤ĦçĲĨ ĊĠĠĠĠĠĠĠ Ġif Ġ(! isEnabled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġwhen Ġ( event . action ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Event . ACTION _ DOWN , ĠMotion Event . ACTION _ MOVE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġgrade Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdistance : ĠFloat Ġ= Ġevent . x Ġ- Ġpadding Left Ġ- Ġgrade Space ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( distance Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgrade Ġ= Ġdistance Ġ/ Ġ( grade Width Ġ+ Ġgrade Space ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgrade Ġ= Ġmin ( max ( grade , Ġ 0 f ), Ġgrade Count . toFloat ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( grade Ġ- Ġgrade . toInt () Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgrade Ġ= Ġif Ġ( grade Ġ- Ġgrade . toInt () Ġ> Ġ 0 . 5 f ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ 0 . 5 Ġ- Ġ 1 Ġ ç®Ĺ ä¸Ģ é¢ Ĺ æĺŁ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( grade Ġ+ Ġ 0 . 5 f ). toInt (). toFloat () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ 0 Ġ- Ġ 0 . 5 Ġ ç®Ĺ åįĬ é¢ Ĺ æĺŁ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgrade . toInt () Ġ+ Ġ 0 . 5 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( grade Ġ* Ġ 1 0 Ġ!= Ġcurrent Grade Ġ* Ġ 1 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Grade Ġ= Ġgrade ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlistener ?. on Rating Changed ( this , Ġcurrent Grade , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Draw ( canvas : ĠCanvas ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġgrade Count ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstart : ĠInt Ġ= Ġgrade Space Ġ+ Ġ( grade Width Ġ+ Ġgrade Space ) Ġ* Ġi ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgrade Bounds . left Ġ= Ġpadding Left Ġ+ Ġstart ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgrade Bounds . top Ġ= Ġpadding Top ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgrade Bounds . right Ġ= Ġgrade Bounds . left Ġ+ Ġgrade Width ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgrade Bounds . bottom Ġ= Ġgrade Bounds . top Ġ+ Ġgrade Height ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( current Grade Ġ> Ġi ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(( half Drawable Ġ!= Ġnull ) Ġ&& Ġ( grade Step Ġ== ĠGradle Step . HALF ) Ġ&& Ġ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Grade . toInt () Ġ== Ġi ) Ġ&& Ġ( current Grade Ġ- Ġcurrent Grade . toInt () Ġ== Ġ 0 . 5 f )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhalf Drawable !!. bounds Ġ= Ġgrade Bounds ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhalf Drawable !!. draw ( canvas ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfill Drawable . bounds Ġ= Ġgrade Bounds ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfill Drawable . draw ( canvas ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnormal Drawable . bounds Ġ= Ġgrade Bounds ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnormal Drawable . draw ( canvas ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Rating Drawable (@ Drawable Res Ġnormal Drawable Id : ĠInt , Ġ@ Drawable Res Ġhalf Drawable Id : ĠInt , Ġ@ Drawable Res Ġfill Drawable Id : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġset Rating Drawable ( Context Compat . get Drawable ( context , Ġnormal Drawable Id ) !! , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠContext Compat . get Drawable ( context , Ġhalf Drawable Id ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠContext Compat . get Drawable ( context , Ġfill Drawable Id ) !! ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Rating Drawable ( normal Drawable : ĠDrawable , Ġhalf Drawable : ĠDrawable ?, Ġfill Drawable : ĠDrawable ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ// Ġ ä¸¤ å¼ł åĽ¾çīĩ çļĦ å®½ é«ĺ ä¸į ä¸Ģèĩ´ ĊĠĠĠĠĠĠĠ Ġif Ġ( normal Drawable . intrinsic Width Ġ!= Ġfill Drawable . intrinsic Width Ġ|| ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnormal Drawable . intrinsic Height Ġ!= Ġfill Drawable . intrinsic Height ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException (" The Ġwidth Ġand Ġheight Ġof Ġthe Ġpicture Ġdo Ġnot Ġagree ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġthis . normal Drawable Ġ= Ġnormal Drawable ĊĠĠĠĠĠĠĠ Ġthis . half Drawable Ġ= Ġhalf Drawable ĊĠĠĠĠĠĠĠ Ġthis . fill Drawable Ġ= Ġfill Drawable ĊĠĠĠĠĠĠĠ Ġgrade Width Ġ= Ġthis . normal Drawable . intrinsic Width ĊĠĠĠĠĠĠĠ Ġgrade Height Ġ= Ġthis . normal Drawable . intrinsic Height ĊĠĠĠĠĠĠĠ Ġrequest Layout () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Grade (): ĠFloat Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġcurrent Grade ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Grade ( grade : ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġfinal Grade : ĠFloat Ġ= Ġgrade ĊĠĠĠĠĠĠĠ Ġif Ġ( final Grade Ġ> Ġgrade Count ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfinal Grade Ġ= Ġgrade Count . toFloat () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( final Grade Ġ- Ġfinal Grade . toInt () Ġ!= Ġ 0 . 5 f Ġ|| Ġfinal Grade Ġ- Ġfinal Grade . toInt () Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException (" grade Ġmust Ġbe Ġa Ġmultiple Ġof Ġ 0 . 5 f ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcurrent Grade Ġ= Ġfinal Grade ĊĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠĠĠĠĠ Ġlistener ?. on Rating Changed ( this , Ġcurrent Grade , Ġfalse ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Grade Count (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġgrade Count ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Grade Count ( count : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( count Ġ> Ġcurrent Grade ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Grade Ġ= Ġcount . toFloat () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġgrade Count Ġ= Ġcount ĊĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Grade Space ( space : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġgrade Space Ġ= Ġspace ĊĠĠĠĠĠĠĠ Ġrequest Layout () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Grade Step ( step : ĠGradle Step ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġgrade Step Ġ= Ġstep ĊĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Grade Step (): ĠGradle Step ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġgrade Step ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset On Rating Bar ChangeListener ( listener : ĠOn Rating ChangeListener ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . listener Ġ= Ġlistener ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġenum Ġclass ĠGradle Step Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ/** Ġ åįĬ é¢ Ĺ æĺŁ Ġ*/ ĊĠĠĠĠĠĠĠ ĠHAL F , ĊĊĠĠĠĠĠĠĠ Ġ/** Ġä¸Ģ é¢ Ĺ æĺŁ Ġ*/ ĊĠĠĠĠĠĠĠ ĠONE ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinterface ĠOn Rating ChangeListener Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* Ġ è¯Ħ åĪĨ åıĳçĶŁ åıĺåĮĸ çĽĳåĲ¬ æĹ¶ åĽŀè°ĥ ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġgrade ĠĠĠĠĠĠĠĠĠĠĠĠ Ġå½ĵåīį æĺŁ æĺŁ æķ° ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġtouch ĠĠĠĠĠĠĠĠĠĠĠĠ Ġæĺ¯åĲ¦ éĢļè¿ĩ è§¦ æĳ ¸ æĶ¹åıĺ ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġon Rating Changed ( rating Bar : ĠSimple Rating Bar , Ġgrade : ĠFloat , Ġtouch : ĠBoolean ) ĊĠĠĠ Ġ} Ċ }