日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android宫格自动换行,九宫格视图的布局及展示(相册选择)

發(fā)布時間:2023/12/1 Android 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android宫格自动换行,九宫格视图的布局及展示(相册选择) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

上周一個朋友帶的項目出了點問題,招的ios開發(fā)人員在實現(xiàn)選取相冊圖片后用九宮格的樣式展示時遇到了瓶頸,花了將近2周都沒有解決。后來在跟我交流的過程中他把項目的圖片發(fā)給我看了下,看完我就笑了,這就只是個算法的問題,花點時間思考下基本就能解決的。廢話不多說,把之前完成的效果展示出來。

以上是直接用手機截的圖,傳上來沒想到會這么大。其中圖片添加的功能是引入了一個第三方的庫,非常好用,跟qq上的圖片添加功能幾乎沒兩樣,庫的名字是ZLPhotoActionSheet。當然這都不是重點,重點是怎樣去實現(xiàn)九宮格的展示,上面的圖片中每行是4個,這個是我自定義的宏,可以任意修改,每行的展示數(shù)目以及展示的總數(shù)目,是比較靈活的。

這里要說的是算法的核心,如果想不到這些也就沒法做到自動換行展示了。

首先,你得自定義展示的總數(shù)目MAXPhotosNO(這里默認是9),每行展示的個數(shù)AvgImgsNo(默認為4),在自定義用來展示九宮格的視圖類里寫一個對象方法-(void)updateTheViewWithImgsArr:(NSArray *)imgsArr;,也就是將獲取到的圖片數(shù)組對象傳入這個方法,然后再進行處理。

然后,就到了最關(guān)鍵的一步了,對圖圖片數(shù)組進行處理。先判斷數(shù)組里元素個數(shù)是否等于MAXPhotosNO,這里用于判斷是否需要隱藏添加按鈕。然后進行for循環(huán)處理,創(chuàng)建用于承載圖片的UIImageView,個數(shù)為圖片數(shù)組元素的個數(shù)。每次創(chuàng)建之前要知道它是第幾行的第幾個,以此來計算它應(yīng)該處的位置。

設(shè)置2個int類型參數(shù):(i代表循環(huán)的變量)

int s = i/AvgImgsNo;(確定是第幾行,0代表第一行,以此類推)

int r = i%AvgImgsNo;(確定是第幾個,0代表第一個,以此類推)

接下來就可以計算它的位置了:(帶space的參數(shù)為間距)

imgV.frame = CGRectMake(ImgSpace*(r+1)+AvgWidth*r,RowSpace*????????????????(s+1)+AvgWidth*s,AvgWidth,AvgWidth);

當然,千萬別忘了添加按鈕的位置也發(fā)生了改變:

同樣的2個參數(shù):?(因為它始終是最后一個,所以直接在后面加1計算就可以了)

int k = (i+1)/AvgImgsNo;

int j = (i+1)%AvgImgsNo;

這里要注意:如果數(shù)組元素的個數(shù)已經(jīng)達到了設(shè)置的MAXPhotosNO的最大值,要這樣做處理

if((int)imgsArr.count==MaxPhotosNo){

k = MaxPhotosNo/AvgImgsNo;????//始終讓它處在最后一行的最后一個,因為我需要它的方位來布局,如果不要的同學(xué),可以不用這樣寫

}

最后,其實已經(jīng)完成了,其中的細節(jié)可能還有些,但是大體的思路基本就是這個樣子,非常的簡單。我真的有點不明白為啥這樣的一個功能2周都寫不出來......,好吧我們都是站在巨人肩膀上說風(fēng)涼話的人哈哈~

總結(jié)

以上是生活随笔為你收集整理的Android宫格自动换行,九宫格视图的布局及展示(相册选择)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。