Android應用截圖兩種方法

來源:互聯網
上載者:User

標籤:android應用   瀏覽器   介面   webview   

在Android應用開發過程中,可能會遇到需要對整個介面或者某一部分進行的需求。Android中對View的也有很多中方式:

  1. 使用DrawingCache
  2. 直接調用View.draw
DrawingCache方法:如果使用DrawingCache,則對要的View有一個要求:View本身已經顯示在介面上。如果View沒有添加到介面上或者沒有顯示(繪製)過,則buildDrawingCache會失敗。這種方式比較適合對應用介面或者某一部分的。步驟很簡單:
view.setDrawingCacheEnabled(true);view.buildDrawingCache();  //啟用DrawingCache並建立位元影像Bitmap bitmap = Bitmap.createBitmap(view.getDrawingCache()); //建立一個DrawingCache的拷貝,因為DrawingCache得到的位元影像在禁用後會被回收view.setDrawingCacheEnabled(false);  //禁用DrawingCahce否則會影響效能

View.draw方法:如果需要的View並沒有添加到介面上,可能是通過java代碼建立的或者inflate建立的,此時調用DrawingCache方法是擷取不到位元影像的。因為View在添加到容器中之前並沒有得到實際的大小(如果LayoutWidth是MatchParent,它還沒有Parent…),所以首先需要指定View的大小:
private void layoutView(View v, int width, int height) {// validate view.width and view.heightv.layout(0, 0, width, height);int measuredWidth = View.MeasureSpec.makeMeasureSpec(width, View.MeasureSpec.EXACTLY);int measuredHeight = View.MeasureSpec.makeMeasureSpec(height, View.MeasureSpec.EXACTLY);// validate view.measurewidth and view.measureheightv.measure(measuredWidth, measuredHeight);v.layout(0, 0, v.getMeasuredWidth(), v.getMeasuredHeight());i}

然後View和其內部的子View都具有了實際大小,也就是完成了布局,相當與添加到了介面上。接著就可以建立位元影像並在上面繪製了:
int viewWidth = webView.getMeasuredWidth();int viewHeight = webView.getMeasuredHeight();if (viewWidth > 0 && viewHeight > 0) {b = Bitmap.createBitmap(viewWidth, viewHeight, Config.ARGB_8888);Canvas cvs = new Canvas(b);webView.draw(cvs);}

對於WebView的有一點特殊,網頁內容並不能在布局完成後立即渲染出來,因為WebView大小的變化就相當與案頭瀏覽器視窗大小的變化,Webkit需要根據視窗大小重新渲染所有的內容,這最多大概需要300ms的時間(對於不同效能的裝置、網頁複雜程度和Webkit版本可能不同)。如果建立背景WebView需要的話,應該在建立時就對其進行布局操作,這樣載入完成後大部分就已經渲染完畢了(除非有非同步js處理)。

Android應用兩種方法

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.