Android實現將View轉化為圖片並保存到本地
本文實例為大傢分享瞭Android將View轉化為圖片並保存到本地的具體代碼,供大傢參考,具體內容如下
一、概述
app中有需求需要將View轉化為圖片並保存到本地,這裡分兩種情況:
1.View本身已經顯示在界面上
2.View還沒有添加到界面上或者沒有顯示(繪制)過
二、實現方法
對於上述的第一種情況我使用下面代碼即可:
private void viewSaveToImage(View view) { view.setDrawingCacheEnabled(true); view.setDrawingCacheQuality(View.DRAWING_CACHE_QUALITY_HIGH); view.setDrawingCacheBackgroundColor(Color.WHITE); // 把一個View轉換成圖片 Bitmap cachebmp = loadBitmapFromView(view); FileOutputStream fos; String imagePath = ""; try { // 判斷手機設備是否有SD卡 boolean isHasSDCard = Environment.getExternalStorageState().equals( android.os.Environment.MEDIA_MOUNTED); if (isHasSDCard) { // SD卡根目錄 File sdRoot = Environment.getExternalStorageDirectory(); File file = new File(sdRoot, Calendar.getInstance().getTimeInMillis()+".png"); fos = new FileOutputStream(file); imagePath = file.getAbsolutePath(); } else throw new Exception("創建文件失敗!"); cachebmp.compress(Bitmap.CompressFormat.PNG, 90, fos); fos.flush(); fos.close(); } catch (Exception e) { e.printStackTrace(); } LogUtil.e("imagePath="+imagePath); view.destroyDrawingCache(); } private Bitmap loadBitmapFromView(View v) { int w = v.getWidth(); int h = v.getHeight(); Bitmap bmp = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888); Canvas c = new Canvas(bmp); c.drawColor(Color.WHITE); /** 如果不設置canvas畫佈為白色,則生成透明 */ v.layout(0, 0, w, h); v.draw(c); return bmp; }
如果是第二種,還這樣使用的話,就會報錯瞭,因為View在添加到容器中之前並沒有得到實際的大小,所以首先需要指定View的大小:
DisplayMetrics metric = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(metric); int width = metric.widthPixels; // 屏幕寬度(像素) int height = metric.heightPixels; // 屏幕高度(像素) View mingpianView = LayoutInflater.from(this).inflate(R.layout.view_team_mingpian, null, false); layoutView(mingpianView, width, height);
//然後View和其內部的子View都具有瞭實際大小,也就是完成瞭佈局,相當與添加到瞭界面上。接著就可以創建位圖並在上面繪制瞭: private void layoutView(View v, int width, int height) { // 整個View的大小 參數是左上角 和右下角的坐標 v.layout(0, 0, width, height); int measuredWidth = View.MeasureSpec.makeMeasureSpec(width, View.MeasureSpec.EXACTLY); int measuredHeight = View.MeasureSpec.makeMeasureSpec(10000, View.MeasureSpec.AT_MOST); /** 當然,measure完後,並不會實際改變View的尺寸,需要調用View.layout方法去進行佈局。 * 按示例調用layout函數後,View的大小將會變成你想要設置成的大小。 */ v.measure(measuredWidth, measuredHeight); v.layout(0, 0, v.getMeasuredWidth(), v.getMeasuredHeight()); }
然後再調用viewSaveToImage(mingpianView);方法即可。
以上就是本文的全部內容,希望對大傢的學習有所幫助,也希望大傢多多支持WalkonNet。
推薦閱讀:
- 淺談Android截屏和指定View生成截圖
- Android自定義有限制區域圖例角度自識別塗鴉工具類中篇
- Android自定義ViewGroup多行多列效果
- Android View實現圓形進度條
- Android自定義View實現隨機數驗證碼