下載本文檔
版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 項目工程基礎(chǔ)課程設(shè)計
- 山西機(jī)電職業(yè)技術(shù)學(xué)院《阿拉伯文學(xué)選讀》2023-2024學(xué)年第一學(xué)期期末試卷
- 2025年度旅游景區(qū)導(dǎo)游旅游安全責(zé)任合同4篇
- 2024淘寶年度平臺安全防護(hù)與隱私保護(hù)服務(wù)合同3篇
- 2025年度大理石石材翻新與維修服務(wù)合同3篇
- 二零二五版旅游企業(yè)導(dǎo)游崗位聘用合同3篇
- 2025年度老舊房屋拆除工程安全施工合同范本協(xié)議書4篇
- 二零二五年度煤炭運輸合同環(huán)保評估協(xié)議4篇
- 二零二五版國際貿(mào)易跨境支付結(jié)算安全合同3篇
- 二零二五產(chǎn)學(xué)研合作開發(fā)合同:智能網(wǎng)聯(lián)汽車技術(shù)共享協(xié)議4篇
- 春節(jié)英語介紹SpringFestival(課件)新思維小學(xué)英語5A
- 進(jìn)度控制流程圖
- 2023年江蘇省南京市中考化學(xué)真題
- 【閱讀提升】部編版語文五年級下冊第四單元閱讀要素解析 類文閱讀課外閱讀過關(guān)(含答案)
- 供電副所長述職報告
- 現(xiàn)在完成時練習(xí)(短暫性動詞與延續(xù)性動詞的轉(zhuǎn)換)
- 產(chǎn)品質(zhì)量監(jiān)控方案
- 物業(yè)總經(jīng)理述職報告
- 新起點,新發(fā)展心得體會
- 深圳大學(xué)學(xué)校簡介課件
- 校園欺凌問題成因及對策分析研究論文
評論
0/150
提交評論