首页 > 解决方案 > 采取screenshort WebView android

问题描述

我只是创建了一个简单的 WebView 并截图,但结果并不满意。这是我写的一个简单的代码:

val webView = WebView(context)
var content = this.getContent() // this.getContent() is demo html string
webView.loadDataWithBaseURL(null, content, "text/HTML", "UTF-8", null);
webView.webViewClient = object : WebViewClient() {
    override fun onPageFinished(view: WebView, url: String) {
        super.onPageFinished(view, url)
        SystemClock.sleep(1000)
    var data = webView.toBitmap()
    var path = applicationContext.getExternalFilesDir(null).toString() + "/sample.jpg"
    var file = File(path)
    file.writeBitmap(data, Bitmap.CompressFormat.JPEG, 100)
    print("\n absolutePath ${file.path}")

    }
}

/// 扩大

fun View.toBitmap(): Bitmap {
    this.measure(View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED);
    print("\n measuredWidth: ${this.measuredWidth}, measuredHeight: ${this.measuredHeight}")
    val bitmap = Bitmap.createBitmap(this.measuredWidth, this.measuredHeight, Bitmap.Config.ARGB_8888)
    val canvas = Canvas(bitmap)
    this.draw(canvas)
    return bitmap
}

fun Bitmap.toByteArray(): ByteArrayOutputStream {
    val stream = ByteArrayOutputStream()
    this.compress(Bitmap.CompressFormat.JPEG, 100, stream)
    return stream
}

fun File.writeBitmap(bitmap: Bitmap, format: Bitmap.CompressFormat, quality: Int) {
    try {
        var fout = FileOutputStream(this.path)
        bitmap.compress(format, quality, fout)
        fout.flush()
        fout.close()
    } catch (e: Exception) {
        e.printStackTrace();

    }
}

在此处输入图像描述

我想拍下我的 webview 的全貌,而不仅仅是一个可见的部分。那么我能用这段代码做什么呢?

标签: androidwebview

解决方案


这是我复制的代码

fun loadWebView() {
        var content = this.getContent()
        var webView = WebView(this)
        webView.loadDataWithBaseURL(null, content, "text/HTML", "UTF-8", null)
        webView.setInitialScale(1)
        webView.settings.javaScriptEnabled = true
        webView.settings.useWideViewPort = true
        webView.settings.javaScriptCanOpenWindowsAutomatically = true
        webView.settings.loadWithOverviewMode = true

        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) {
            print("\n=======> enabled scrolled <=========")
            WebView.enableSlowWholeDocumentDraw()
        }
        setContentView(webView)
        print("\n ///////////////// webview setted /////////////////")

        webView.webViewClient = object : WebViewClient() {
            override fun onPageFinished(view: WebView?, url: String?) {
                super.onPageFinished(view, url)
                Handler().postDelayed( {
                    print("OS Version: ${android.os.Build.VERSION.SDK_INT}")
                    print("\n ================ webview completed ==============")
                    var result = saveWebView(webView)
                    print("result $result")
                }, 1000)

            }
        }
    }

并将其保存到文件

fun saveWebView(webView: WebView): Boolean {
        var data = webView.toBitmap()
        var path = this.applicationContext.getExternalFilesDir(null).toString() + "/sample.jpg"
        var file = File(path)
        file.writeBitmap(data, Bitmap.CompressFormat.JPEG, 100)
        return true
    }

这是我得到的结果。 在此处输入图像描述

但我想知道为什么不使用 setContentView(webView) 方法就不能将 WebView 转换为位图?


推荐阅读