中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么在Android中使用WebView實現截圖分享功能

發布時間:2021-05-17 17:10:19 來源:億速云 閱讀:281 作者:Leah 欄目:移動開發

今天就跟大家聊聊有關怎么在Android中使用WebView實現截圖分享功能,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。

1.通過android SDK自帶的Canvas方法進行繪制。 

2.通過webView實現客戶端與H5交互,然后將H5界面做截圖處理。

本文主要介紹第二種方式的實現過程,第一種方式的實現方法,后續有時間會在博客中做說明,下面開始本文內容。
首先確定我們要實現的邏輯:

1.客戶端與H5的交互,客戶端將用戶信息(用戶名、Uid、用戶頭像等)發送給H5;

2.客戶端截取WebView功能的實現;

3.分享功能的添加。

1.客戶端與H5交互

在界面布局中添加webView布局,對WebView布局進行初始化操作(此處需要網絡權限,不做單獨處理)

wv_imgweb = (WebView) findViewById(R.id.h6_wv_imgweb);

WebSettings webSettings = wv_imgweb.getSettings();
//此處可更加具體的H5界面功能進行相應的WebSettings設置,本文只是演示基本效果
  webSettings.setJavaScriptEnabled(true);
  webSettings.setSupportZoom(false); 
  wv_imgweb.requestFocusFromTouch();
  wv_imgweb.setDrawingCacheEnabled(true);
  wv_imgweb.setVerticalScrollBarEnabled(false);
  wv_imgweb.setHorizontalScrollBarEnabled(false);
  wv_imgweb.setVerticalScrollbarOverlay(false);
  wv_imgweb.setHorizontalScrollbarOverlay(false);
  wv_imgweb.setWebViewClient(new WebViewClient() {
   @Override
   public boolean shouldOverrideUrlLoading(WebView view, String url) {
    view.loadUrl(url);
    return true;
   }

   @Override
   public void onPageFinished(WebView view, String url) {
    super.onPageFinished(view, url);
    //加載邏輯的處理
   }

   @Override
   public void onPageStarted(WebView view, String url, Bitmap favicon) {
    super.onPageStarted(view, url, favicon);
    //加載邏輯的處理
   }
  });

//添加用戶信息參數,加載H5分享地址
wv_imgweb.loadUrl(h6_url);

2.截圖功能的實現

上文中的WebView頁面加載完成后,即可調用截圖功能,并將圖片保存在本地指定文件夾(此處需要存儲權限,不做單獨處理)
android中WebView可以通過多種方式實現截圖,下面分別做不同介紹:

2.1截取屏幕內內容

第一種方式是通過Bitmap bitmap = webView.getDrawingCache()截取屏幕內顯示內容,注意調用此方法setDrawingCacheEnabled(true)必須設置為true;

2.2截取整個WebView內容

第二種方式是通過Picture snapShot = wv_imgweb.capturePicture()來截取整個WebView的內容

Picture snapShot = wv_imgweb.capturePicture();
if (snapShot != null && snapShot.getWidth() > 0 && snapShot.getHeight() > 0) {
  Bitmap bitmap = Bitmap.createBitmap(snapShot.getWidth(), snapShot.getHeight(), Bitmap.Config.ARGB_8888);//設置相應的圖片質量
  Canvas canvas = new Canvas(bitmap);
  snapShot.draw(canvas);
//將截取的圖片保存到本地
try {
  File appFile = new File(Environment.getExternalStorageDirectory() + "/testpic/app");
  if (!appFile.exists() && !appFile.isDirectory()) {
   appFile.mkdirs();
  }
  String fileName = Environment.getExternalStorageDirectory().getPath() + "/testpic/app/share.jpg";
  FileOutputStream fos = new FileOutputStream(fileName);
  //設置保存本地圖片質量
  bitmap.compress(Bitmap.CompressFormat.JPEG, 70, fos);
  fos.close();
  } catch (Exception e) {
   UIUtils.setLogInfo("eee", e.getMessage());
  }
}

2.3截取整個WebView內容

Android 為了提高各方面的繪制速度(如滾動操作),為每一個 View 建立一個緩存,使用 View.buildDrawingCache 為自己的 View 建立相應的緩存, 這個 cache 就是一個 bitmap 對象。利用這個功能可以對整個屏幕視圖進行截屏并生成 Bitmap ,也可以獲得指定的 View 的 Bitmap 對象。

wv_imgweb.measure(View.MeasureSpec.makeMeasureSpec(View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED),
    View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED));
  wv_imgweb.layout(0, 0, wv_imgweb.getMeasuredWidth(), wv_imgweb.getMeasuredHeight());
  wv_imgweb.setDrawingCacheEnabled(true);
  wv_imgweb.buildDrawingCache();
  Bitmap longImage = Bitmap.createBitmap(wv_imgweb.getMeasuredWidth(),
    wv_imgweb.getMeasuredHeight(), Bitmap.Config.ARGB_8888);

  Canvas canvas = new Canvas(longImage); // 畫布的寬高和 WebView 保持一致
  Paint paint = new Paint();
  canvas.drawBitmap(longImage, 0, wv_imgweb.getMeasuredHeight(), paint);
  wv_imgweb.draw(canvas);
  //將截取的圖片保存到本地
  try {
   File appFile = new File(Environment.getExternalStorageDirectory() + "/testpic/app");
   if (!appFile.exists() && !appFile.isDirectory()) {
    appFile.mkdirs();
   }
   String fileName = Environment.getExternalStorageDirectory().getPath() + "/testpic/app/share.jpg";
   FileOutputStream fos = new FileOutputStream(fileName);
   longImage.compress(Bitmap.CompressFormat.JPEG, 70, fos);
   fos.close();
  } catch (Exception e) {
   UIUtils.setLogInfo("eee", e.getMessage());
  }

問題:在5.0+上會發現,截取的快照只顯示了webview中顯示出來的那部分,沒有顯示出來的部分是空白的。通過google找到了原因,在5.0+版本上,Android對webview做了優化,旨在減少內存占用以提高性能。因此在默認情況下會智能的繪制html中需要繪制的部分,其實就是當前屏幕展示的html內容,因此會出現未顯示的圖像是空白的。解決辦法是調用enableSlowWholeDocumentDraw()方法。這個方法需要在webview創建之前調用,在Activity里就是在setContentView前去調用,此方法會有顯著的性能開銷。

Android是什么

Android是一種基于Linux內核的自由及開放源代碼的操作系統,主要使用于移動設備,如智能手機和平板電腦,由美國Google公司和開放手機聯盟領導及開發。

看完上述內容,你們對怎么在Android中使用WebView實現截圖分享功能有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

吴堡县| 江达县| 东平县| 屏南县| 阳山县| 河曲县| 白朗县| 泽普县| 黔东| 温州市| 改则县| 莱州市| 中牟县| 汪清县| 拉萨市| 桂平市| 侯马市| 隆回县| 西乌| 新密市| 奎屯市| 哈尔滨市| 诸城市| 溆浦县| 三穗县| 桐庐县| 漾濞| 广河县| 印江| 建瓯市| 锡林浩特市| 淳安县| 鱼台县| 邵阳市| 昌平区| 昌吉市| 清新县| 准格尔旗| 新闻| 乌鲁木齐县| 日照市|