【移動應(yīng)用開發(fā)技術(shù)】Android中怎么自定義一個圖片選擇器_第1頁
【移動應(yīng)用開發(fā)技術(shù)】Android中怎么自定義一個圖片選擇器_第2頁
【移動應(yīng)用開發(fā)技術(shù)】Android中怎么自定義一個圖片選擇器_第3頁
【移動應(yīng)用開發(fā)技術(shù)】Android中怎么自定義一個圖片選擇器_第4頁
【移動應(yīng)用開發(fā)技術(shù)】Android中怎么自定義一個圖片選擇器_第5頁
免費預(yù)覽已結(jié)束,剩余1頁可下載查看

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

【移動應(yīng)用開發(fā)技術(shù)】Android中怎么自定義一個圖片選擇器

本篇文章為大家展示了Android中怎么自定義一個圖片選擇器,內(nèi)容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細(xì)介紹希望你能有所收獲。步驟1:動態(tài)申請權(quán)限private

boolean

permissionOpen()

{

if

(ContextCompat.checkSelfPermission(this,

Manifest.permission.WRITE_EXTERNAL_STORAGE)

!=

PackageManager.PERMISSION_GRANTED)

{//動態(tài)申請讀寫權(quán)限

ActivityCompat.requestPermissions(this,

new

String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},

101);

}

else

{

getImages();//有權(quán)限的話直接去獲取手機(jī)圖片

return

true;

}

return

false;

}@Override

public

void

onRequestPermissionsResult(int

requestCode,

@NonNull

String[]

permissions,

@NonNull

int[]

grantResults)

{

if

(requestCode

==

101)

{

if

(grantResults[0]

==

PackageManager.PERMISSION_GRANTED)

{

getImages();//申請權(quán)限成功之后,去獲取手機(jī)圖片

}

else

{

Toast.makeText(this,

"權(quán)限申請失敗",

Toast.LENGTH_LONG).show();

}

return;

}

super.onRequestPermissionsResult(requestCode,

permissions,

grantResults);

}步驟2:給手機(jī)圖片做一個模型,我的想法是以每一個放圖片的文件夾為一個模型,說通俗點,A文件夾下邊有3張圖片a.jpg,b.jpg,c.jpg,B文件夾下有2張圖片,d.jhpg,e.jpg,我就給A和B等等這種文件夾做一個模型public

class

PictureBean

{//我的想法是以每一個放圖片的文件夾為一個模型

private

String

name;//文件夾的名字,以后會用到,具體用處可以先打開微信的圖片選擇器,點左下角視頻和圖片,彈出一個popupwindow,每一個item都有一個name,他這個name應(yīng)該是圖片父目錄的文件名,我這個name也是這個意思,不過這篇博客應(yīng)該暫時用不到

private

int

number;//這個文件夾下圖片的數(shù)量

private

String

firstImageUrl;//這個文件夾下的第一張圖片

private

List<String>

imageList;//這個文件夾下的圖片集合

private

String

parentPath;//這個文件夾的絕對路徑

public

String

getParentPath()

{

return

parentPath;

}

public

void

setParentPath(String

parentPath)

{

this.parentPath

=

parentPath;

}

public

String

getName()

{

return

name;

}

public

void

setName(String

name)

{

=

name;

}

public

int

getNumber()

{

return

number;

}

public

void

setNumber(int

number)

{

this.number

=

number;

}

public

String

getFirstImageUrl()

{

return

firstImageUrl;

}

public

void

setFirstImageUrl(String

firstImageUrl)

{

this.firstImageUrl

=

firstImageUrl;

}

public

List<String>

getImageList()

{

return

imageList;

}

public

void

setImageList(List<String>

imageList)

{

this.imageList

=

imageList;

}

}步驟3:先聲明好list等變量,避免一會看代碼不知道某個變量怎么來的privateList<PictureBean>beanList;//最后我們會把所有的文件夾模型都放到這里,你要是問圖片在哪?當(dāng)然是在PictureBean的imageList里啦步驟4:看getImages()方法private

void

getImages()

{

new

Thread(new

Runnable()

{//查詢圖片什么的,肯定要開一個線程就不解釋了

@Override

public

void

run()

{

Uri

imageUri

=

MediaStore.Images.Media.EXTERNAL_CONTENT_URI;//這個Uri代表要查詢的數(shù)據(jù)庫名稱加上表的名稱

ContentResolver

contentResolver

=

context.getContentResolver();//這個用的少不知道該怎么表達(dá),反正就是對外共享數(shù)據(jù)唄,提供手機(jī)里的各種數(shù)據(jù)(視頻,圖片,文件)

Cursor

cursor

=

contentResolver.query(imageUri,

null,

MediaStore.Images.Media.MIME_TYPE//這個就是查詢操作了吧(cursor,游標(biāo),聽起來很熟悉,老師絕對講過,不過原諒我數(shù)據(jù)庫這一塊渣到爆炸)

+

"=?

or

"

+

MediaStore.Images.Media.MIME_TYPE

+

"=?",

new

String[]{"image/jpeg"},

MediaStore.Images.Media.DATE_MODIFIED);

if

(cursor

==

null)

{

return;

}

List<String>

pathList

=

new

ArrayList<>();//同一個文件夾下的圖片的集合

String

mParentPath

=

"";//所在文件夾的絕對路徑

while

(cursor.moveToNext())

{

String

path

=

cursor.getString(cursor.getColumnIndex(MediaStore.Images.Media.DATA));//圖片的絕對路徑

File

file

=

new

File(path).getParentFile();

String

parentPath

=

file.getAbsolutePath();//文件夾的絕對路徑

if

(cursor.isFirst())

{//如果是第一個圖片

pathList.add(path);//直接加到圖片集合里

mParentPath

=

parentPath;//文件夾的絕對路徑

等于

我們獲取到的這張圖片的

文件夾的絕對路徑

}

else

if

(mParentPath.equals(parentPath))

{//如果

新的圖片的文件夾的絕對路徑

跟上一張圖片的文件夾的絕對路徑相同,

說明兩張圖片在同一個文件夾下

pathList.add(path);//繼續(xù)填到集合里

}

else

{//說明

新的圖片跟

上一張圖片不在同一個文件夾

List<String>

list

=

new

ArrayList<>();

list.addAll(pathList);

//用一個新的list

加載

之前一個文件夾下的所有圖片(這里暫時想不到更好的辦法了)

pathList.clear();

pathList.add(path);

//舊的list

清空之后呢,

開始加載

新的文件夾下的

第一張圖片(仔細(xì)看一看就知道邏輯了,代碼寫的確實比較爛,哈哈哈)

PictureBean

bean

=

new

PictureBean();//我們之前寫好的模型

bean.setNumber(list.size());

//數(shù)量就是list的數(shù)量

bean.setFirstImageUrl(list.get(0));

//第一張圖片

bean.setImageList(list);//圖片集合

bean.setParentPath(mParentPath);//所在文件夾的絕對路徑

beanList.add(bean);//把模型放到步驟3定義好的list

mParentPath

=

parentPath;

//文件夾絕對路徑

變成了

新的文件夾路徑

}

}

//到此為止,喜大普奔,所有的圖片都已經(jīng)獲取到了,接下來直接顯示出來(想做復(fù)雜的呢可以參考微信,我正在參考中...)

handler.sendEmptyMessage(1);

}

}).start();

}步驟5:因為我們這次是簡單版,既然圖片數(shù)據(jù)都有了,就簡單的展示一下好了Handler

handler

=

new

Handler()

{

@Override

public

void

handleMessage(Message

msg)

{

final

List<String>

list

=

new

ArrayList<>();

//因為是簡單版,我就直接把所有的圖片都存到一個list里用來顯示了

for

(PictureBean

pictureBean

:

beanList)

{

for

(String

s

:

pictureBean.getImageList())

{

list.add(s);

}

}

adapter.setList(list);

adapter.notifyDataSetChanged();

adapter.setmOnClick(new

ItemAdapter.onClick()

{

@Ove

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論