webView 截圖

最近項目有個 webView 里面截圖的需求瓤狐。記錄一下瞬铸。

        // 獲取根視圖
        View dView = context.getWindow().getDecorView();
        // 啟用繪圖緩存
        dView.setDrawingCacheEnabled(true);
        // 調用緩存
        dView.buildDrawingCache();
        Bitmap bitmap = Bitmap.createBitmap(dView.getDrawingCache());
        // 獲取內置SD卡路徑
        String sdCardPath = Environment.getExternalStorageDirectory().getPath();
        // 圖片文件路徑
        Calendar calendar = Calendar.getInstance();
        String creatTime = calendar.get(Calendar.YEAR) + "-" +
                calendar.get(Calendar.MONTH) + "-"
                + calendar.get(Calendar.DAY_OF_MONTH) + " "
                + calendar.get(Calendar.HOUR_OF_DAY) + ":"
                + calendar.get(Calendar.MINUTE);
        String filePath = sdCardPath + File.separator + "shot_" + creatTime + ".png";
        if (bitmap != null) {
            try {
                File file = new File(filePath);
                FileOutputStream os = new FileOutputStream(file);
                bitmap.compress(Bitmap.CompressFormat.PNG, 100, os);
                os.flush();
                os.close();
                XjjLogManagerUtil.d(TAG, "存儲完成");
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

通過上述代碼截圖后,發(fā)現(xiàn)一個問題础锐。webView 里面截圖的一些圖片是沒有顯示的嗓节。在網上查了一下,需要在 webView 的 xml 布局文件里面加上一行屬性設置
android:layerType="software"

        <WebView
            android:id="@+id/webView"
            android:layerType="software"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />

這樣子就能夠正常截圖了皆警。webView 中的圖片也能正常在截圖中顯示出來了拦宣。
然而又發(fā)現(xiàn)了一個問題,就是每次在同一個 webView 中截圖信姓,保存的圖片永遠是第一張圖片鸵隧,初步猜測是因為緩存問題,于是換了種截圖方式

        //獲取webview縮放率
        float scale = webView.getScale();
        //得到縮放后webview內容的高度
        int webViewHeight = (int) (webView.getContentHeight()*scale);
        Bitmap bitmap = Bitmap.createBitmap(webView.getWidth(),webViewHeight, Bitmap.Config.ARGB_8888);
        Canvas canvas = new Canvas(bitmap);
        //繪制
        webView.draw(canvas);

發(fā)現(xiàn)從 webView 獲取的截圖意推,有時候會有一大段空白豆瘫。所以又改成了從 decorView 中獲取當前屏幕。

        View decorView = getContext().getWindow().getDecorView();
        Bitmap bitmap = Bitmap.createBitmap(decorView.getWidth(), decorView.getHeight(), Bitmap.Config.ARGB_8888);
        Canvas canvas = new Canvas(bitmap);
        //繪制
        decorView.draw(canvas);

這樣子截圖功能最終就做好了菊值。缺點就是把標題欄也給帶進去了外驱。但能保證截圖的是 webView 當前顯示的全部內容。 所以最終代碼是

        View decorView = getContext().getWindow().getDecorView();
        Bitmap bitmap = Bitmap.createBitmap(decorView.getWidth(), decorView.getHeight(), Bitmap.Config.ARGB_8888);
        Canvas canvas = new Canvas(bitmap);
        //繪制
        decorView.draw(canvas);
        // 獲取內置SD卡路徑
        String sdCardPath = Environment.getExternalStorageDirectory().getPath();
        // 圖片文件路徑
        Calendar calendar = Calendar.getInstance();
        String creatTime = calendar.get(Calendar.YEAR) + "-" +
                calendar.get(Calendar.MONTH) + "-"
                + calendar.get(Calendar.DAY_OF_MONTH) + " "
                + calendar.get(Calendar.HOUR_OF_DAY) + ":"
                + calendar.get(Calendar.MINUTE) + ":"
                + calendar.get(Calendar.SECOND);
        String filePath = sdCardPath + File.separator + "shot_" + creatTime + ".png";
        if (bitmap != null) {
            try {
                File file = new File(filePath);
                if (file.exists()) {
                    file.delete();
                }
                FileOutputStream os = new FileOutputStream(file);
                bitmap.compress(Bitmap.CompressFormat.PNG, 100, os);
                os.flush();
                os.close();
                XjjLogManagerUtil.d(TAG, "存儲完成");
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末腻窒,一起剝皮案震驚了整個濱河市昵宇,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌儿子,老刑警劉巖瓦哎,帶你破解...
    沈念sama閱讀 221,820評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異典徊,居然都是意外死亡杭煎,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,648評論 3 399
  • 文/潘曉璐 我一進店門卒落,熙熙樓的掌柜王于貴愁眉苦臉地迎上來羡铲,“玉大人,你說我怎么就攤上這事儡毕∫睬校” “怎么了扑媚?”我有些...
    開封第一講書人閱讀 168,324評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長雷恃。 經常有香客問我疆股,道長,這世上最難降的妖魔是什么倒槐? 我笑而不...
    開封第一講書人閱讀 59,714評論 1 297
  • 正文 為了忘掉前任旬痹,我火速辦了婚禮,結果婚禮上讨越,老公的妹妹穿的比我還像新娘两残。我一直安慰自己,他們只是感情好把跨,可當我...
    茶點故事閱讀 68,724評論 6 397
  • 文/花漫 我一把揭開白布人弓。 她就那樣靜靜地躺著,像睡著了一般着逐。 火紅的嫁衣襯著肌膚如雪崔赌。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,328評論 1 310
  • 那天耸别,我揣著相機與錄音健芭,去河邊找鬼。 笑死太雨,一個胖子當著我的面吹牛吟榴,可吹牛的內容都是我干的。 我是一名探鬼主播囊扳,決...
    沈念sama閱讀 40,897評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼吩翻,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了锥咸?” 一聲冷哼從身側響起狭瞎,我...
    開封第一講書人閱讀 39,804評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎搏予,沒想到半個月后熊锭,有當地人在樹林里發(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 46,345評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡雪侥,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,431評論 3 340
  • 正文 我和宋清朗相戀三年碗殷,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片速缨。...
    茶點故事閱讀 40,561評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡锌妻,死狀恐怖,靈堂內的尸體忽然破棺而出旬牲,到底是詐尸還是另有隱情仿粹,我是刑警寧澤搁吓,帶...
    沈念sama閱讀 36,238評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站吭历,受9級特大地震影響堕仔,放射性物質發(fā)生泄漏。R本人自食惡果不足惜晌区,卻給世界環(huán)境...
    茶點故事閱讀 41,928評論 3 334
  • 文/蒙蒙 一摩骨、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧契讲,春花似錦仿吞、人聲如沸滑频。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,417評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽峡迷。三九已至银伟,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間绘搞,已是汗流浹背彤避。 一陣腳步聲響...
    開封第一講書人閱讀 33,528評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留夯辖,地道東北人琉预。 一個月前我還...
    沈念sama閱讀 48,983評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像蒿褂,于是被迫代替她去往敵國和親圆米。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,573評論 2 359

推薦閱讀更多精彩內容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,290評論 25 707
  • ¥開啟¥ 【iAPP實現(xiàn)進入界面執(zhí)行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開一個線程啄栓,因...
    小菜c閱讀 6,444評論 0 17
  • 開發(fā)中如何截圖娄帖,webView為例,用法如下: (一)截取當前屏幕顯示的區(qū)域(設備的全屏) 代碼如下: (二)截取...
    Freedom_fly閱讀 2,762評論 0 2
  • 一昙楚、異常定義:中斷了正常指令流的事件class Test {public static void main (St...
    tah閱讀 179評論 0 0
  • 初五近速,懶懶地起了床,發(fā)現(xiàn)微信圈里都在接財神爺了堪旧。我知道這已經不是從前意義上的封建迷信了削葱,而是人們新年里的一...
    東觀閱讀 601評論 0 1