用ViewPager寫個不一樣的列表效果

2021-08-20 12:45:47 字數 1785 閱讀 1829

先來個效果

需求:靠近中間的item始終壓在兩邊。滑動後中間的始終在最下面。

效果的實現大致有兩種,第一種:自定義recyclerview layoutmanager 通過onlayoutchildren() 自己擺放控制項,繪製需從螢幕兩邊的控制項往中間繪製,這樣才能保證覆蓋層級沒有問題,同時需要重寫父類scrollhorizontallyby() ,在其中呼叫offsetchildrenhorizontal()使得recyclerview擁有滑動效果

第二種:通過對viewpager設定android:clipchildren=」false」 方法,讓父布局不去限制viewpager 繪製,即在螢幕外面的也會被畫出來,本文主要介紹第二種,簡便易行的方案

對viewpager 設定android:clipchildren=」false」 使viewpager 畫出隱藏區域(此時如果是mathparent 畫在螢幕外面),將viewpager區域縮小到乙個item ,可以看到多個item。

外面包裹乙個viewgroup 將事件傳遞給viewpager

ll_container.setontouchlistener(new view.ontouchlistener() 

});

3.處理層疊關係,viewpager

public

class

customviewpager

extends

viewpager

public

customviewpager(context context, attributeset attrs)

private

void

init()

/** @return 第n個位置的child 的繪製索引

*/@override

protected

intgetchilddrawingorder(int childcount, int n)

childcenterxabs.add(indexabs);

}collections.sort(childcenterxabs);

}return childindex.get(childcenterxabs.get(childcount - 1 - n));

}private

intgetviewcenterx(view view)

}

4.自定義實現縮放唯一動畫

public

class

scaleintransformer

extends

basepagetransformer

public

scaleintransformer(float minscale)

public

scaleintransformer(viewpager.pagetransformer pagetransformer)

public

scaleintransformer(float minscale, viewpager.pagetransformer pagetransformer)

@targetapi(build.version_codes.honeycomb)

public

void

pagetransform(view view, float position)

}

不一樣又不一樣的 木板接水

空地上豎立著n個從左到右排列的木板,它們可以把水擋住,但溢位最邊上木板的水將會流到空地上。已知木板間距都是單位1,現給定每個木板的高度,請求出總共能接住的水量?說明一點,這裡只考慮間距 寬度 和高度,不考慮第三個維度,因此水量是平方單位。木板高度分別是2,1,3,那麼我們可以接住2 2 4平方單位的...

我們不一樣

前輩們因自身實際的種種因素的影響而產生的認知,並不一定適用於我們自身。你可能從來不會去想乙個問題 你的觀點,來自 其實,它們絕大部分來自網路,它們或多或少地蠶食了你的判斷力。未來的路要怎麼走,沒有對與錯。有的,只是每乙個選擇所需要承擔的責任。我不想面臨,後之視今亦猶今之視昔的悲哀。我希望,未來回首,...

我們不一樣

這麼多年的兄弟 有誰比我更了解你 太多太多不容易 磨平了歲月和脾氣 時間轉眼就過去 這身後不散的筵席 只因為我們還在 心留在原地 張開手 需要多大的勇氣 這片天 你我一起撐起 更努力 只為了我們想要的明天 好好的 這份情好好珍惜 我們不一樣 每個人都有不同的境遇 我們在這裡 在這裡等你 我們不一樣 ...