高仿微信聊天界面長按彈框樣式

效果圖

背景

在公司作的項目裏面,恰好有須要用到微信聊天界面長按彈框樣式這種UI的。html

網上找了一下,沒找到。android

Android現成的 ListPopupWindow又不能知足需求。git

所以在非上班時間擼一個出來,供你們使用。github

示例代碼

關鍵文件、示例代碼及使用方法等我都放到github上了。算法

這篇文章就不展開說明了。微信

這篇文章重點說明下怎麼把這個樣式給擼出來的。htm

說明一些關鍵點。blog

讓你們知其然,更加知其因此然。圖片

代碼傳送門get

關鍵代碼解剖

PopupWindow默認寬高設置

咱們知道,建立PopupWindow時能夠指定顯示的寬度和高度。

這邊說下代碼裏面默認的寬高是如何設置的。

默認寬度=設備的寬度/3。

默認高度的設置就比較麻煩一點。

由於高度若是設置過少,可能顯示的列表Item數目就會比較少。

若是設置過大,可能顯示列表會撐滿整個屏幕。

基於此,這邊代碼設置的默認高度是動態變化的。

變化算法以下:

最大默認高度=設備的高度/2。
列表高度=Item高度*Item數目。
若是列表高度<最大默認高度,默認高度=列表高度。
若是列表高度>最大默認高度,默認高度=最大默認高度。

至於Item高度如何計算,示例代碼裏面有,這邊就不贅餘闡釋了。

PopupWindow顯示位置肯定

在說明顯示位置以前,咱們先來簡單說下android的座標系。

上面的圖片簡單畫了一下,主要是說明

X軸方向,往右邊X值變大。
Y軸方向,往下面Y值變大。

這個對於後面顯示位置的計算有用。

接下來咱們說下顯示位置的,既然是一個位置,那麼就會有兩個維度值。

X軸(水平方向)

Y軸(豎直方向)

除了維度值,還有一個基準點,這裏的基準點就是列表的左上角。

爲了說明該PopupWindow適應各個位置,因此效果圖裏面有三個按鈕,分別位於左下角,中間,右上角。

X座標位置肯定

由上圖咱們能夠得出結論。

當顯示的View在左邊時,顯示的X座標=View的中心點X座標。
當顯示的View在右邊時,顯示的X座標=View的中心點X座標-PopupWindow寬度。

Y座標位置肯定

由上圖咱們能夠得出結論。

當顯示的View在上邊時,顯示的Y座標=View的中心點Y座標。
當顯示的View在下邊時,顯示的Y座標=View的中心點Y座標-PopupWindow高度。

好了,到此高仿微信聊天界面長按彈框樣式的代碼剖析就結束了。

有任何問題歡迎評論留言。

相關文章
相關標籤/搜索