Android實現(xiàn)圖片上傳功能
最近在開發(fā)中,涉及到用戶的意見反饋功能這一方面的開發(fā),需要用戶輸入的文字或者提交的圖片,效果大概類似于微信朋友圈那樣的圖片選擇器,一開始自己找了個用universal-image-loader框架寫的,很容實現(xiàn),但是容易出現(xiàn)內(nèi)存溢出,并且不好解決,是在沒辦法,就自己看了一些資料,準(zhǔn)備自己寫;在這里說下本人實現(xiàn)的思路,進(jìn)入頁面也就是顯示選擇圖片的頁面用GridView來實現(xiàn),點擊添加圖標(biāo)的時候,用Dialog實現(xiàn),給Dialog添加相應(yīng)的動畫就可以了,進(jìn)入圖片展示頁面還是用GridView來實現(xiàn),點擊所有圖片時用的是Dialog和listview來實現(xiàn)的,以下是相應(yīng)的代碼實現(xiàn):
private void showDialog() { View view = getLayoutInflater().inflate(R.layout.user_header_dialog, null); final Dialog dialog = new Dialog(this, R.style.transparentFrameWindowStyle); dialog.setContentView(view, new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT)); Window window = dialog.getWindow(); // 設(shè)置顯示動畫 window.setWindowAnimations(R.style.main_menu_animstyle); WindowManager.LayoutParams wl = window.getAttributes(); wl.x = 0; wl.y = getWindowManager().getDefaultDisplay().getHeight(); // 以下這兩句是為了保證按鈕可以水平滿屏 wl.width = ViewGroup.LayoutParams.MATCH_PARENT; wl.height = ViewGroup.LayoutParams.WRAP_CONTENT; // 設(shè)置顯示位置 dialog.onWindowAttributesChanged(wl); // 設(shè)置點擊外圍解散 dialog.setCanceledOnTouchOutside(true); dialog.show(); btn_picture = (Button) window.findViewById(R.id.btn_picture); btn_photo = (Button) window.findViewById(R.id.btn_photo); btn_cancle = (Button) window.findViewById(R.id.btn_cancle); btn_picture.setOnClickListener(new View.OnClickListener() {// 圖庫 @SuppressLint("InlinedApi") @Override public void onClick(View v) { Intent intent = new Intent(PhotoSelectActivity.this, AlbumActivity.class); startActivity(intent); dialog.dismiss(); } }); btn_photo.setOnClickListener(new View.OnClickListener() {// 相機 @SuppressLint("InlinedApi") @Override public void onClick(View v) { photo(); dialog.dismiss(); } }); btn_cancle.setOnClickListener(new View.OnClickListener() {// 取消 @Override public void onClick(View v) { dialog.dismiss(); } }); }
這是彈框部分的代碼,在這里需要注意的就是android6.0系統(tǒng)調(diào)用的時候特別是相機和訪問sd權(quán)限的問題,跟android6.0以下的系統(tǒng)是不一樣的,android6.0以下的系統(tǒng)在AndroidManifest.xml文件中配置就可以了,android6.0及6.0以上的話不僅需要再AndroidManifest.xml中聲明還需要動態(tài)申請權(quán)限,如未申請權(quán)限就會造成程序的閃退,這里的話沒有對android6.0及6.0以上做適配,關(guān)于android6.0及6.0以上系統(tǒng)權(quán)限的話,會在之后博文中提到;
protected void onActivityResult(int requestCode, int resultCode, Intent data) { switch (requestCode) { case TAKE_PICTURE: if (Bimp.tempSelectBitmap.size() < 9 && resultCode == RESULT_OK) { File file = new File(Environment.getExternalStorageDirectory() + "/" + mImageFileName); mImagePath = file.getPath(); Bitmap bitmapFromUrl = FileUtils.getBitmapFromUrl(mImagePath, 320, 480); String[] split = mImagePath.split("0/"); String strUrl = ""; if (split != null && split.length > 0) { strUrl = split[1]; } // 重新緩存圖片 FileUtils.setPicToView(PhotoSelectActivity.this,bitmapFromUrl, strUrl); // 獲取重新緩存圖片的大小 File iconDir = FileUtils.getIconDir(PhotoSelectActivity.this); String absolutePath = iconDir.getAbsolutePath(); String picPath = absolutePath + strUrl; ImageItem takePhoto = new ImageItem(); takePhoto.setBitmap(bitmapFromUrl); takePhoto.setImagePath(picPath); Bimp.tempSelectBitmap.add(takePhoto); } break; } }
這里是調(diào)用相機拍照返回時調(diào)用這里,獲取到圖片同時對圖片進(jìn)行壓縮處理,同時緩存在sd中,并獲取相應(yīng)的路徑;
/** * 清空圖片集合 */ private void cleanImageList() { Bimp.max = 0; Bimp.tempSelectBitmap.clear(); }
在點擊返回或者物理物理返回鍵的的時候要對定義的靜態(tài)變量賦值為0,同時清空圖片保存時定義的靜態(tài)list集合;
private void initPow() { View view = getLayoutInflater().inflate(R.layout.listview_popupwindows, null); final Dialog dialog = new Dialog(this, R.style.Dialog_Fullscreen); dialog.setContentView(view, new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT)); Window window = dialog.getWindow(); // 設(shè)置顯示動畫 window.setWindowAnimations(R.style.main_menu_animstyle); WindowManager.LayoutParams wl = window.getAttributes(); wl.x = 0; wl.y = getWindowManager().getDefaultDisplay().getHeight(); int height = 0; int h=(int) (mScreenHeight / 1.6); int listH=AlbumActivity.contentList.size()*DensityUtil.dip2px(AlbumActivity.this,80); if (listH==0) { height=h; }else{ if (listH>h) { height=h; }else{ height=listH; } } // 以下這兩句是為了保證按鈕可以水平滿屏 wl.width = ViewGroup.LayoutParams.MATCH_PARENT; wl.height = height; // 設(shè)置顯示位置 dialog.onWindowAttributesChanged(wl); // 設(shè)置點擊外圍解散 dialog.setCanceledOnTouchOutside(true); dialog.show(); ListView listview = (ListView) window.findViewById(R.id.listview); ListAdapter listAdapter = new ListAdapter(AlbumActivity.this); listview.setAdapter(listAdapter); listview.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { dataList = (ArrayList<ImageItem>) AlbumActivity.contentList.get(arg2).imageList; String folderName = AlbumActivity.contentList.get(arg2).bucketName; tv_all.setText("" + folderName); gridImageAdapter = new AlbumGridViewAdapter(AlbumActivity.this, dataList, Bimp.tempSelectBitmap); agridView.setAdapter(gridImageAdapter); dialog.dismiss(); } }); }
這里的話是在圖片選擇展示頁面,點擊所有圖片時的彈框,用的是一個Dialog和listview來實現(xiàn)的,在這里要注意的是就是listview展示的高度問題,這里所限獲取到所有l(wèi)istview條目高度和,同時獲取到屏幕的高度,如果listview條目高度和大于屏幕高度/1.6時,就采用屏幕高度/1.6,如果listview條目高度和小于屏幕高度/1.6時,就采用listview條目高度;這樣就差不多實現(xiàn)了,下面是運行效果:
源碼:Androidphoto
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Android Listview中顯示不同的視圖布局詳解及實例代碼
- Android實現(xiàn)ImageView陰影和圖層效果
- 詳解Android中的MVP架構(gòu)分解和實現(xiàn)
- android使用AsyncTask實現(xiàn)多線程下載實例
- android多種滑動沖突的解決方案
- 很實用的Android日期計算類
- Android 中StringBuffer 和StringBuilder常用方法
- Android獲取聯(lián)系人姓名和電話代碼
- Android引導(dǎo)頁面的簡單實現(xiàn)
- android基于dialog實現(xiàn)等待加載框示例
- Android 兩種方法實現(xiàn)長按返回健退出
相關(guān)文章
Android仿微信菜單(Menu)(使用C#和Java分別實現(xiàn))
這篇文章主要介紹了Android仿微信菜單(Menu)(使用C#和Java分別實現(xiàn)),本文分別給出C#和Java版的運行效果及實現(xiàn)代碼,需要的朋友可以參考下2015-06-06android實現(xiàn)手機與單片機藍(lán)牙模塊通信
這篇文章主要為大家詳細(xì)介紹了android實現(xiàn)手機與單片機藍(lán)牙模塊通信的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-05-05Android自定義View實現(xiàn)抽獎轉(zhuǎn)盤
這篇文章主要為大家詳細(xì)介紹了Android自定義View實現(xiàn)抽獎轉(zhuǎn)盤,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-12-12Android使用Photoview實現(xiàn)圖片左右滑動及縮放功能
這篇文章主要為大家詳細(xì)介紹了Android使用Photoview實現(xiàn)圖片左右滑動及縮放功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-01-01studio碰到問題:java.lang.UnsatisfiedLinkError解決辦法
這篇文章主要介紹了studio碰到問題:java.lang.UnsatisfiedLinkError解決辦法的相關(guān)資料,需要的朋友可以參考下2017-02-02Android開發(fā)實現(xiàn)帶清空按鈕的EditText示例
這篇文章主要介紹了Android開發(fā)實現(xiàn)帶清空按鈕的EditText,結(jié)合具體實例形式分析了Android實現(xiàn)EditText清空按鈕功能相關(guān)操作技巧,非常具有實用價值,需要的朋友可以參考下2017-11-11