gpt4 book ai didi

android - 如何以编程方式截取 webview 的屏幕截图,捕获整个页面?

转载 作者:IT老高 更新时间:2023-10-28 22:17:42 29 4
gpt4 key购买 nike

我认为标题几乎涵盖了它,但我的 Activity 中有一个 webview。我已经将一个 url 加载到 webview 中,我想截取整个页面的屏幕截图(视口(viewport)中的任何内容以及“首屏下方”的内容)。

我有用于快照视口(viewport)的代码,我知道这可以在 iOS 中通过在创建快照之前放大 webview 来完成。我在这里尝试使用相同的技术:

    WebView browserView = (WebView) findViewById(R.id.browserView);

//Resize the webview to the height of the webpage
int pageHeight = browserView.getContentHeight();
LayoutParams browserParams = browserView.getLayoutParams();
browserView.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT, pageHeight));

//Capture the webview as a bitmap
browserView.setDrawingCacheEnabled(true);
Bitmap bitmap = Bitmap.createBitmap(browserView.getDrawingCache());
browserView.setDrawingCacheEnabled(false);

//Create the filename to use
String randomFilenamepart = String.valueOf(new SecureRandom().nextInt(1000000));
String filename = Environment.getExternalStorageDirectory().toString() + "/Screenshot_" + randomFilenamepart + ".jpg";
File imageFile = new File(filename);
//Stream the file out to external storage as a JPEG
OutputStream fout = null;
try {
fout = new FileOutputStream(imageFile);
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fout);
fout.flush();
fout.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
browserView.setLayoutParams(browserParams);
}

但我仍然只捕获视口(viewport)。忽略诸如由于页面太大而耗尽内存之类的事情,有谁知道我做错了什么或如何将视口(viewport)之外的部分包含在内?

最佳答案

试试这个

import java.io.FileOutputStream;

import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Picture;
import android.os.Bundle;
import android.view.Menu;
import android.webkit.WebView;
import android.webkit.WebViewClient;

public class MainActivity extends Activity {

WebView w;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
w = new WebView(this);
w.setWebViewClient(new WebViewClient() {
public void onPageFinished(WebView view, String url) {
Picture picture = view.capturePicture();
Bitmap b = Bitmap.createBitmap(picture.getWidth(),
picture.getHeight(), Bitmap.Config.ARGB_8888);
Canvas c = new Canvas(b);

picture.draw(c);
FileOutputStream fos = null;
try {

fos = new FileOutputStream("mnt/sdcard/yahoo.jpg");
if (fos != null) {
b.compress(Bitmap.CompressFormat.JPEG, 100, fos);

fos.close();
}
} catch (Exception e) {

}
}
});

setContentView(w);
w.loadUrl("http://search.yahoo.com/search?p=android");
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
}

在 AndroidManifest.xml 文件中添加 INTERNET PERMISSION 和 WRITE_EXTERNAL_STORAGE。

如果应用在 Marshmallow 之上或之上运行,则需要在运行时请求文件写入权限。

关于android - 如何以编程方式截取 webview 的屏幕截图,捕获整个页面?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9745988/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com