關(guān)于安卓毛玻璃實(shí)現(xiàn)(二)動(dòng)態(tài)毛玻璃recyclerview

上文說到啤挎,一個(gè)單獨(dú)的頁面實(shí)現(xiàn)毛玻璃

博客地址

但是目前,這種方案放在了recyclerview中,就會(huì)有性能問題了,為什么脉顿?recyclerview因?yàn)槠浼虞d數(shù)據(jù)的緩存性質(zhì)糕档,會(huì)同時(shí)加載多個(gè)view熬的,如果所有view都在做動(dòng)態(tài)毛玻璃萍聊,那性能開銷可想而知。

T梦觥J俳啊!代碼地址在文末G看鳌Mっ!

環(huán)境:

1骑歹、win10 androidstudio4.4.0

2预烙、jdk 1.8

場景:

recyclerview使用了linearlayoutmanager,pagersnaphelper分頁滑動(dòng)道媚。

思路:

如果減少性能開銷扁掸?有一下方法:

(一)用戶滑動(dòng)recyclerview的時(shí)候,暫停動(dòng)態(tài)毛玻璃

(二)毛玻璃控件失去焦點(diǎn)的時(shí)候最域,暫停毛玻璃

(三)非當(dāng)前頁顯示時(shí)谴分,暫停毛玻璃

實(shí)現(xiàn):

(一)通過定義一些對(duì)象,分別記錄當(dāng)前用戶的滑動(dòng)位置镀脂,滑動(dòng)狀態(tài)(滑動(dòng)中牺蹄,停止滑動(dòng))等蝴悉。再結(jié)合毛玻璃在recyclerview中的位置船逮,進(jìn)行比對(duì)實(shí)現(xiàn)序无。核心代碼如下:

            if(getmAdapterPos() == LibPicBlurDragConstant.getInstance().getDragPos()){
                if(LibPicBlurDragConstant.getInstance().isDrag()){
                    return false;
                }
            }

上面代碼的意思就是仗岖,如果拖動(dòng)位置和當(dāng)前毛玻璃控件位置相等且拖動(dòng)中,就暫停毛玻璃行為最筒。

(二)失去監(jiān)聽的判斷晦鞋,通過以下代碼即可捕獲:

    @Override
    public void onWindowFocusChanged(boolean hasWindowFocus) {
        super.onWindowFocusChanged(hasWindowFocus);
        Log.d(TAG, "onWindowFocusChanged hasWindowFocus: " + hasWindowFocus + " mIdentify: " + mIdentify);
        if (hasWindowFocus) {
            setCanBlur(true);
        } else {
            setCanBlur(false);
        }
    }

(三)由于毛玻璃的位置谋币,是通過windowlocation方法獲取的暑竟,所以斋射,只要得出離屏位置,即可得出是否在當(dāng)前頁面光羞。注意<;炒蟆纱兑!
調(diào)用該庫中,需要自定義一個(gè)父類布局(recyclerview場景)化借,替換為原來的Window DecoreView,因?yàn)檫@里涉及的是一個(gè)動(dòng)態(tài)繪制顯示的問題潜慎,所以要替換。核心代碼如下:
離屏位置判斷:

            final int[] locations = new int[2];
//            parentView.getLocationOnScreen(locations);
//            Log.d(TAG, "checkScreenLocation " + mIdentify + " parentSc: " + locations[1] + " parentHe: " + parentView.getMeasuredHeight());
            getLocationOnScreen(locations);
            int childScreenHeight = locations[1];
//            Log.d(TAG, "checkScreenLocation " + mIdentify + " childSc: " + locations[1] + " childHe: " + getMeasuredHeight());

            //離屏位置----------------------------------------------------------
            if (childScreenHeight <= 0) {
                //上一頁
                return false;
            }
            if (childScreenHeight >= parentView.getMeasuredHeight()) {
                return false;
            }
            //離屏位置----------------------------------------------------------

自定義decoreview設(shè)置:

    protected View getActivityDecorView() {
        if(mCusDecorView!=null){
            return mCusDecorView;
        }
        Context ctx = getContext();
        for (int i = 0; i < 4 && !(ctx instanceof Activity) && ctx instanceof ContextWrapper; i++) {
            ctx = ((ContextWrapper) ctx).getBaseContext();
        }
        if (ctx instanceof Activity) {
            return ((Activity) ctx).getWindow().getDecorView();
        } else {
            return null;
        }
    }

    public void setmCusDecorView(View mCusDecorView) {
        this.mCusDecorView = mCusDecorView;
    }

至此,全部代碼已經(jīng)列出铐炫。

代碼地址

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末垒手,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子倒信,更是在濱河造成了極大的恐慌科贬,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,718評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件鳖悠,死亡現(xiàn)場離奇詭異榜掌,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)乘综,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,683評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門憎账,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人卡辰,你說我怎么就攤上這事胞皱。” “怎么了九妈?”我有些...
    開封第一講書人閱讀 158,207評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵反砌,是天一觀的道長。 經(jīng)常有香客問我萌朱,道長于颖,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,755評(píng)論 1 284
  • 正文 為了忘掉前任嚷兔,我火速辦了婚禮森渐,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘冒晰。我一直安慰自己同衣,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,862評(píng)論 6 386
  • 文/花漫 我一把揭開白布壶运。 她就那樣靜靜地躺著耐齐,像睡著了一般。 火紅的嫁衣襯著肌膚如雪蒋情。 梳的紋絲不亂的頭發(fā)上埠况,一...
    開封第一講書人閱讀 50,050評(píng)論 1 291
  • 那天,我揣著相機(jī)與錄音棵癣,去河邊找鬼辕翰。 笑死,一個(gè)胖子當(dāng)著我的面吹牛狈谊,可吹牛的內(nèi)容都是我干的喜命。 我是一名探鬼主播沟沙,決...
    沈念sama閱讀 39,136評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼壁榕!你這毒婦竟也來了矛紫?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,882評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤牌里,失蹤者是張志新(化名)和其女友劉穎颊咬,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體牡辽,經(jīng)...
    沈念sama閱讀 44,330評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡贪染,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,651評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了催享。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片杭隙。...
    茶點(diǎn)故事閱讀 38,789評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖因妙,靈堂內(nèi)的尸體忽然破棺而出痰憎,到底是詐尸還是另有隱情,我是刑警寧澤攀涵,帶...
    沈念sama閱讀 34,477評(píng)論 4 333
  • 正文 年R本政府宣布铣耘,位于F島的核電站,受9級(jí)特大地震影響以故,放射性物質(zhì)發(fā)生泄漏蜗细。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,135評(píng)論 3 317
  • 文/蒙蒙 一怒详、第九天 我趴在偏房一處隱蔽的房頂上張望炉媒。 院中可真熱鬧,春花似錦昆烁、人聲如沸吊骤。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,864評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽白粉。三九已至,卻和暖如春鼠渺,著一層夾襖步出監(jiān)牢的瞬間鸭巴,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,099評(píng)論 1 267
  • 我被黑心中介騙來泰國打工拦盹, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留鹃祖,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,598評(píng)論 2 362
  • 正文 我出身青樓掌敬,卻偏偏與公主長得像惯豆,于是被迫代替她去往敵國和親池磁。 傳聞我的和親對(duì)象是個(gè)殘疾皇子奔害,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,697評(píng)論 2 351

推薦閱讀更多精彩內(nèi)容