package Ġcom . example . l iling zhi . tw ore cyc . util Ċ Ċ import Ġandroid . os . Handler Ċ import Ġandroid . util . Log Ċ import Ġandroidx . recyclerview . widget . Linear LayoutManager Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ Ċ class ĠRe cyc Util { ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ// ç§»åĬ¨ åĪ° n çļĦ ä½įç½® ï¼Į å¹¶ä¸Ķ ç½® é¡¶ ĊĠĠĠĠĠĠĠ Ġfun Ġmove To Pos it And Top ( n : Int , Ġlayout M : ĠLinearLayoutManager , Ġre cyc : ĠRecyclerView , Ġhandler : Handler ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġfirst = layout M . findFirst Visible Item Position () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġlast = layout M . find Last Visible Item Position () ĊĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( n <= first ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġre cyc . scrollTo Position ( n ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} else Ġif ( n <= last ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġoff Set = re cyc . getChild At ( n - first ). top ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġre cyc . smooth Scroll By ( 0 , off Set ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} else { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġre cyc . scrollTo Position ( n ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// è¿ĻéĩĮ è¦ģ å»¶ è¿ Ł ä¸Ģä¸ĭ ï¼Į åĽłä¸º ä¹ĭåīį çļĦ scrollTo Position çļĦ å®ŀéĻħ åĬŁèĥ½ æĺ¯ å¼Ģ åŃĲ çº¿ç¨ĭ å®ĮæĪĲ çļĦ ï¼Į å¦Ĥæŀľ çĽ´æİ¥ è°ĥ findFirst Visible Item Position ï¼Į èİ·åıĸ çļĦæķ°æį® è¿ĺæĺ¯ ä¹ĭåīį çļĦ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandler . post Delayed ( Runnable Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfirst = layout M . findFirst Visible Item Position () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast = layout M . find Last Visible Item Position () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( re cyc . getChild At ( last - first )== null ){ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} else { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġoff Set = re cyc . getChild At ( last - first ). top ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġre cyc . smooth Scroll By ( 0 , off Set ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, 5 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ç§»åĬ¨ åĪ° n çļĦ ä½įç½® ï¼Į å¹¶ä¸Ķ å±ħ ä¸Ń ĊĠĠĠĠĠĠĠ Ġfun Ġmove To Pos it And Center ( n : Int , Ġlayout M : ĠLinearLayoutManager , Ġre cyc : ĠRecyclerView , handler : Handler ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġfirst = layout M . findFirst Visible Item Position () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġlast = layout M . find Last Visible Item Position () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( n <= first ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġre cyc . scrollTo Position ( n ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandler . post Delayed ({ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfirst = layout M . findFirst Visible Item Position () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast = layout M . find Last Visible Item Position () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( re cyc . getChild At ( last - first )== null ){ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} else { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġoff Set = re cyc . getChild At ( last - first ). top ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġre cyc . smooth Scroll By ( 0 ,- off Set / 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, 5 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} else Ġif ( n <= last ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġoff Set = re cyc . getChild At ( n - first ). top ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġre cyc . smooth Scroll By ( 0 , off Set / 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} else { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġre cyc . scrollTo Position ( n ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// è¿ĻéĩĮ è¦ģ å»¶ è¿ Ł ä¸Ģä¸ĭ ï¼Į åĽłä¸º ä¹ĭåīį çļĦ scrollTo Position çļĦ å®ŀéĻħ åĬŁèĥ½ æĺ¯ å¼Ģ åŃĲ çº¿ç¨ĭ å®ĮæĪĲ çļĦ ï¼Į å¦Ĥæŀľ çĽ´æİ¥ è°ĥ findFirst Visible Item Position ï¼Į èİ·åıĸ çļĦæķ°æį® è¿ĺæĺ¯ ä¹ĭåīį çļĦ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandler . post Delayed ( Runnable Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfirst = layout M . findFirst Visible Item Position () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast = layout M . find Last Visible Item Position () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( re cyc . getChild At ( last - first )!= null ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoff Set = re cyc . getChild At ( last - first ). top ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġre cyc . smooth Scroll By ( 0 , off Set / 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, 1 0 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} Ċ }