1. 程式人生 > >Android儲存View轉Bitmap併到本地相簿實時更新

Android儲存View轉Bitmap併到本地相簿實時更新

最開始我想的是截圖儲存更方便,但很醜,於是查了下資料。不到30分鐘就弄出來了,很順利,還是感謝那些開源分享的大神們

遇到沒做過的,先思考,再動手找解決辦法。哈哈。下面是我專案中的的程式碼,可以參考

private void save(final LinearLayout mView){
    // 獲取圖片某佈局
    mView.setDrawingCacheEnabled(true);
    mView.buildDrawingCache();

    mHandler.postDelayed(new Runnable() {

        @Override
        public void run() {
            // 要在執行在子執行緒中
              bmp = mView.getDrawingCache(); // 獲取圖片
            savePicture(bmp, "zzp_sale.png");// 儲存圖片
            mView.destroyDrawingCache(); // 儲存過後釋放資源
        }
    },100);
}
 public void savePicture(Bitmap bm, String fileName) {
        Log.i("xing", "savePicture: ------------------------");
        if (null == bm) {
            Log.i("xing", "savePicture: ------------------圖片為空------");
            return;
        }
        //建立指定資料夾
        File foder = new File(Environment.getExternalStorageDirectory() , "zzp_sale");
        if (!foder.exists()) {
            foder.mkdirs();
        }
        File myCaptureFile = new File(foder, fileName);
        try {
            if (!myCaptureFile.exists()) {
                myCaptureFile.createNewFile();
            }
            BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(myCaptureFile));
            //壓縮儲存到本地
            bm.compress(Bitmap.CompressFormat.JPEG, 90, bos);
            bos.flush();
            bos.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        // 把檔案插入到系統圖庫
        try {
            MediaStore.Images.Media.insertImage(context.getContentResolver(),
                    myCaptureFile.getAbsolutePath(), fileName, null);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        // 最後通知相簿更新
        context.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.parse("file://" + myCaptureFile.getPath())));

        Toast.makeText(context, "儲存成功!", Toast.LENGTH_SHORT).show();

    }