最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android使用WebView實(shí)現(xiàn)截圖分享功能

 更新時間:2018年05月05日 10:45:09   作者:-仰望星空-  
這篇文章主要為大家詳細(xì)介紹了Android使用WebView實(shí)現(xiàn)截圖分享功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下

在APP項(xiàng)目的開發(fā)過程中,經(jīng)常會用到分享圖片的功能,有時候還需要根據(jù)當(dāng)前用戶信息獲取指定的分享圖片,比如要求在用戶分享圖中顯示用戶名、Uid、用戶頭像等信息。想到的實(shí)現(xiàn)方法主要有兩點(diǎn):

1.通過android SDK自帶的Canvas方法進(jìn)行繪制。
2.通過webView實(shí)現(xiàn)客戶端與H5交互,然后將H5界面做截圖處理。

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

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

2.客戶端截取WebView功能的實(shí)現(xiàn);

3.分享功能的添加。

1.客戶端與H5交互

在界面布局中添加webView布局,對WebView布局進(jìn)行初始化操作(此處需要網(wǎng)絡(luò)權(quán)限,不做單獨(dú)處理)

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

WebSettings webSettings = wv_imgweb.getSettings();
//此處可更加具體的H5界面功能進(jìn)行相應(yīng)的WebSettings設(shè)置,本文只是演示基本效果
  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);
    //加載邏輯的處理
   }
  });

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

2.截圖功能的實(shí)現(xiàn)

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

2.1截取屏幕內(nèi)內(nèi)容

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

2.2截取整個WebView內(nèi)容

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

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);//設(shè)置相應(yīng)的圖片質(zhì)量
  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);
  //設(shè)置保存本地圖片質(zhì)量
  bitmap.compress(Bitmap.CompressFormat.JPEG, 70, fos);
  fos.close();
  } catch (Exception e) {
   UIUtils.setLogInfo("eee", e.getMessage());
  }
}

2.3截取整個WebView內(nèi)容

Android 為了提高各方面的繪制速度(如滾動操作),為每一個 View 建立一個緩存,使用 View.buildDrawingCache 為自己的 View 建立相應(yīng)的緩存, 這個 cache 就是一個 bitmap 對象。利用這個功能可以對整個屏幕視圖進(jìn)行截屏并生成 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+上會發(fā)現(xiàn),截取的快照只顯示了webview中顯示出來的那部分,沒有顯示出來的部分是空白的。通過google找到了原因,在5.0+版本上,Android對webview做了優(yōu)化,旨在減少內(nèi)存占用以提高性能。因此在默認(rèn)情況下會智能的繪制html中需要繪制的部分,其實(shí)就是當(dāng)前屏幕展示的html內(nèi)容,因此會出現(xiàn)未顯示的圖像是空白的。解決辦法是調(diào)用enableSlowWholeDocumentDraw()方法。這個方法需要在webview創(chuàng)建之前調(diào)用,在Activity里就是在setContentView前去調(diào)用,此方法會有顯著的性能開銷。

3.分享圖片

通過原生或第三方分享功能,將上述生成的圖片添加到代碼中,完成分享。
如果有不同的見解,歡迎留言指正。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Android studio制作簡易計算器功能

    Android studio制作簡易計算器功能

    這篇文章主要為大家詳細(xì)介紹了Android studio制作簡易計算器功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • Android拍照裁剪圖片

    Android拍照裁剪圖片

    智能手機(jī)像素非常高,完全可以當(dāng)相機(jī)使用,下面一段代碼給大家分享了android拍照裁剪圖片的功能,對android拍照裁剪圖片相關(guān)知識感興趣的朋友一起學(xué)習(xí)吧
    2015-12-12
  • Android中的webview支持頁面中的文件上傳實(shí)例代碼

    Android中的webview支持頁面中的文件上傳實(shí)例代碼

    本篇文章主要介紹了Android中的webview支持頁面中的文件上傳,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-03-03
  • Android開發(fā)必知 九種對話框的實(shí)現(xiàn)方法

    Android開發(fā)必知 九種對話框的實(shí)現(xiàn)方法

    App中少不了與用戶交互的各種dialog,以此達(dá)到很好的用戶體驗(yàn),下面給大家介紹Android開發(fā)必知 九種對話框的實(shí)現(xiàn)方法,有需要的朋友可以參考下
    2015-08-08
  • Android動態(tài)權(quán)限申請實(shí)現(xiàn)步驟分解

    Android動態(tài)權(quán)限申請實(shí)現(xiàn)步驟分解

    對于一些危險權(quán)限在AndroidManifest清單文件中申請之后,還需要得到用戶的許可并打開,才算是真正的開啟了這個權(quán)限。所以可以使用動態(tài)申請權(quán)限,對于某個功能,如果需要開啟某個權(quán)限,在用戶使用它之前,彈窗提示用戶是否要開啟這個權(quán)限
    2023-04-04
  • 另外兩種Android沉浸式狀態(tài)欄實(shí)現(xiàn)思路

    另外兩種Android沉浸式狀態(tài)欄實(shí)現(xiàn)思路

    這篇文章主要為大家介紹了另外兩種Android沉浸式狀態(tài)欄實(shí)現(xiàn)思路,android5.0及以后版本都支持給狀態(tài)欄著色,而目前android主流版本還是4.4,想要深入了解的朋友可以參考一下
    2016-01-01
  • android控件Spinner(下拉列表)的使用例子

    android控件Spinner(下拉列表)的使用例子

    這篇文章主要給大家介紹了關(guān)于android控件Spinner(下拉列表)的使用例子,在Android開發(fā)中下拉框(Spinner)是常用的UI控件之一,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-11-11
  • 分享實(shí)現(xiàn)Android圖片選擇的兩種方式

    分享實(shí)現(xiàn)Android圖片選擇的兩種方式

    本文給大家分享的是Android選擇圖片的兩種方式的實(shí)現(xiàn)代碼,分別是單張選取和多張批量選取,非常的實(shí)用,有需要的小伙伴可以參考下
    2016-01-01
  • Android實(shí)現(xiàn)串口通信

    Android實(shí)現(xiàn)串口通信

    這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)串口通信,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • Android 實(shí)現(xiàn)釘釘自動打卡功能

    Android 實(shí)現(xiàn)釘釘自動打卡功能

    這篇文章主要介紹了Android 實(shí)現(xiàn)釘釘自動打卡功能的步驟,幫助大家更好的理解和學(xué)習(xí)使用Android,感興趣的朋友可以了解下
    2021-03-03

最新評論

舒兰市| 望城县| 行唐县| 安岳县| 邢台市| 金沙县| 吉林市| 开平市| 塔河县| 沭阳县| 平武县| 庆安县| 梧州市| 千阳县| 南川市| 绥江县| 当雄县| 香河县| 曲沃县| 钟祥市| 开江县| 天水市| 永年县| 车致| 水富县| 花莲县| 渝中区| 渭南市| 南乐县| 喜德县| 新田县| 措美县| 土默特右旗| 开封县| 疏附县| 长春市| 宜黄县| 光泽县| 福泉市| 秦皇岛市| 朝阳县|