package Ġcom . yum ode v . ui . view . drag . test Ċ Ċ import Ġandroid . content . Clip Data Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics . Color Ċ import Ġandroid . os . Build Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . Drag Event Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . widget . Button Ċ import Ġandroid . widget . LinearLayout Ċ import Ġandroid . widget . TextView Ċ Ċ import Ġcom . yum ode v . ui . recyclerview . Define Ċ Ċ /** Ċ Ġ* ĠCreated Ġby Ġyum ode v Ġon Ġ 1 7 / 1 2 / 2 1 . Ċ Ġ* Ġ ä¸Ģä¸ª ä¹Ŀ å® « æł¼ ç§»åĬ¨ ä½įç½® Ċ Ġ*/ Ċ Ċ class ĠDrag Test View 1 ( context : ĠContext ) Ġ: ĠLinearLayout ( context ) Ġ{ ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġinit View () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġsub Width Ġ= Ġ 3 0 0 ĊĊĠĠĠ Ġoverride Ġfun Ġon Measure ( width Measure Spec : ĠInt , Ġheight Measure Spec : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Measure ( width Measure Spec , Ġheight Measure Spec ) ĊĠĠĠĠĠĠĠ ĠLog . i ( Define . LOG _ TAG , Ġ" on Measure ") ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġchild Count ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġview Ġ= Ġget Child At ( i ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview . measure ( sub Width , Ġsub Width ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Layout ( changed : ĠBoolean , Ġl : ĠInt , Ġt : ĠInt , Ġr : ĠInt , Ġb : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( changed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġleft Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġtop Ġ= Ġ 5 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġchild Count ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġview Ġ= Ġget Child At ( i ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i ( Define . LOG _ TAG , Ġview . meas ured Width . toString ()+" Ġ"+ view . meas ured Height ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( i Ġ% Ġ 3 Ġ== Ġ 0 Ġ&& Ġi Ġ/ Ġ 3 Ġ> Ġ 0 ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop Ġ+= Ġview . meas ured Height Ġ+ Ġ 5 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . layout ( left , Ġtop , Ġleft Ġ+ Ġview . meas ured Width , Ġtop Ġ+ Ġview . meas ured Height ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft Ġ+= Ġview . meas ured Width Ġ+ Ġ 1 0 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠLog . i ( Define . LOG _ TAG , Ġ" on Layout ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit View () Ġ{ ĊĠĠĠĠĠĠĠ Ġorientation Ġ= ĠLinearLayout . HORIZONTAL ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 .. 8 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbtn Ġ= ĠButton ( context ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbtn . text Ġ= Ġi . toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd View ( btn ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġbtn . setOn Long ClickListener Ġ{ Ġv Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdata Ġ= ĠClip Data . new Plain Text (" value ", ĠgetText ( v )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ< ĠBuild . VERSION _ CODES . N ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġv . start Drag ( data , ĠView . Drag Shadow Builder ( v ), Ġnull , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġv . start Drag And Drop ( data , ĠView . Drag Shadow Builder ( v ), Ġnull , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġbtn . setOn Drag Listener ( On Drag Listener Ġ{ Ġv , Ġevent Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalue Ġ= ĠgetText ( v ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( event . action ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDrag Event . ACTION _ DR AG _ STARTED Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i ( Define . LOG _ TAG , Ġ Ġ"$ value Ġaction _ drag _ started ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ On Drag Listener Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDrag Event . ACTION _ DR AG _ ENTER ED Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġv . set BackgroundColor ( Color . YELLOW ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i ( Define . LOG _ TAG , Ġ"$ value Ġaction _ drag _ enter ed ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ On Drag Listener Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDrag Event . ACTION _ DR AG _ LOCATION Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i ( Define . LOG _ TAG , Ġ"$ value Ġaction _ drag _ location ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ On Drag Listener Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDrag Event . ACTION _ DR AG _ EXIT ED Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġv . set BackgroundColor ( Color . RED ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i ( Define . LOG _ TAG , Ġ"$ value Ġaction _ drag _ exit ed ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ On Drag Listener Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDrag Event . ACTION _ DROP Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i ( Define . LOG _ TAG , Ġ"$ value Ġaction _ drop ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġv . set BackgroundColor ( Color . GREEN ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// å¾ĹåĪ° æĭ ĸ åĬ¨ çļĦåĢ¼ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdrag Val Ġ= ĠInteger . parseInt ( event . clip Data . getItem At ( 0 ). text . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// å¾ĹåĪ° text view çļĦåĢ¼ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġview Val Ġ= ĠInteger . parseInt ( value ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( v Ġis ĠButton ) Ġv . text Ġ= Ġ"" Ġ+ Ġ( drag Val Ġ+ Ġview Val ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ On Drag Listener Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDrag Event . ACTION _ DR AG _ ENDED Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġv . set BackgroundColor ( Color . WHITE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i ( Define . LOG _ TAG , Ġ"$ value Ġaction _ drag _ ended ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ On Drag Listener Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠgetText ( v Ġ: ĠView ): String { ĊĠĠĠĠĠĠĠ Ġif ( v Ġis ĠButton ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġv . text . toString (); ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġ"" ĊĠĠĠ Ġ} Ċ } Ċ