編輯:關於Android編程
這兩天改進優化項目中圖片上傳的代碼,考慮到可能有7、8M的比較大的圖片,因為要先進行壓縮。所以設計到文件的壓縮,保存與清空刪除操作。在這裡記下筆記。
/** * 壓縮並另存為,每次先清空再保存 */ private void compressFile(){ //清空保存目錄下的舊照片 String saveDir = Environment.getExternalStorageDirectory() + "/bag/uploadPictures"; File imageDir = new File(saveDir); if (imageDir.exists()) { clearFolder(imageDir); }else{ imageDir.mkdirs(); } //判斷圖片大小,大於300k則壓縮 for (int i = 0; i < imagePathList.size(); i++) { Bitmap bitmap = compressImage(imagePathList.get(i)); imagePathList.set(i, saveImage(saveDir,bitmap)); } } /**保存圖片,輸入保存目錄和bitmap,以日期命名,返回保存路徑 * * @param path * @param bitmap * @return */ private String saveImage(String path ,Bitmap bitmap){ Date dt = new Date(); SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS"); String imageName =sdf.format(dt)+".jpg"; File file = new File(path,imageName ); if (file.exists()) { file.delete(); } try { FileOutputStream out = new FileOutputStream(file); bitmap.compress(Bitmap.CompressFormat.JPEG, 100, out); out.flush(); out.close(); Log.d(TAG, "圖片已經保存"); return path+"/"+imageName; } catch (FileNotFoundException e) { Log.d(TAG, "文件不存在"); e.printStackTrace(); return ""; } catch (IOException e) { Log.d(TAG, "IO異常"+e.toString()); e.printStackTrace(); return ""; } } /** * 壓縮圖片 * @param imagePath * @return */ private Bitmap compressImage(String imagePath) { PhotoUpBitmapCache bitmapCache = new PhotoUpBitmapCache(); //取1280*720大小 Bitmap image = bitmapCache.revitionImage(imagePath, 1280,720); //用下面這個行代碼會造成OOM,所以必須用Android 自帶的方法去先壓縮再導入 // Bitmap image = BitmapFactory.decodeFile(imagePath); ByteArrayOutputStream baos = new ByteArrayOutputStream(); image.compress(Bitmap.CompressFormat.JPEG, 100, baos);//質量壓縮方法,這裡100表示不壓縮,把壓縮後的數據存放到baos中 int options = 100; while ( baos.toByteArray().length /1024 > 300) { //循環判斷如果壓縮後圖片是否大於100kb,大於繼續壓縮 baos.reset();//重置baos即清空baos image.compress(Bitmap.CompressFormat.JPEG, options, baos);//這裡壓縮options%,把壓縮後的數據存放到baos中 options -= 5;//每次都減少5% } ByteArrayInputStream isBm = new ByteArrayInputStream(baos.toByteArray());//把壓縮後的數據baos存放到ByteArrayInputStream中 Bitmap bitmap = BitmapFactory.decodeStream(isBm, null, null);//把ByteArrayInputStream數據生成圖片 Log.d(TAG, "文件壓縮成功"); return bitmap; } /** * 清空文件夾裡面所有子文件 */ private void clearFolder(File file) { if(file.isDirectory()){ File[] childFiles = file.listFiles(); if (childFiles == null || childFiles.length == 0) { return; } for (int i = 0; i < childFiles.length; i++) { childFiles[i].delete(); } return ; } }
1、checkbox(復選框)checkbox常用於多選的情況,比如批量刪除、添加群聊等;DOM結構 checkbox示例 默認checkbox在右側顯示
本文實例實現一下 RecyclerView,代碼比較簡單,適合初學者,如有錯誤,歡迎指出。復習 ListView可以查看這篇文章深入淺出學習Android ListVie
一、概述無意中翻到的FoldingLayout的介紹的博客,以及github地址。感覺很nice呀,於是花了點時間研究以及編寫,本篇博客將帶大家從最基本的原理分析,一步一
需求NDK是由谷歌娘提供的,某種意義上就是可以讓android使用c開發的第“三”方sdk,所以,正常來說eclipse是沒有配置這個東西的,當然