編輯:關於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 ;
}
}
MUI組件二:復選框、對話框、圖片輪播、圖標和輸入框
1、checkbox(復選框)checkbox常用於多選的情況,比如批量刪除、添加群聊等;DOM結構 checkbox示例 默認checkbox在右側顯示
學習Android Material Design(RecyclerView代替ListView)
本文實例實現一下 RecyclerView,代碼比較簡單,適合初學者,如有錯誤,歡迎指出。復習 ListView可以查看這篇文章深入淺出學習Android ListVie
Android中FoldingLayout折疊布局的用法及實戰全攻略
一、概述無意中翻到的FoldingLayout的介紹的博客,以及github地址。感覺很nice呀,於是花了點時間研究以及編寫,本篇博客將帶大家從最基本的原理分析,一步一
Mac下使用Eclipse實現Android中調用C/C++(NDK)基礎詳細教程
需求NDK是由谷歌娘提供的,某種意義上就是可以讓android使用c開發的第“三”方sdk,所以,正常來說eclipse是沒有配置這個東西的,當然