将 Web 视图转换为 Android 中的图像 4.4 Web 视图不起作用
converting web view as image in Android 4.4 Web-view not working
我有一个使用 webview 显示 D3 图表的应用程序。这是我用于图表的 url 示例:http://nvd3.org/livecode/index.html#codemirrorNav
我能够加载图表并截取该图表的屏幕截图。但是这里 android 4.4 的问题是无法捕获带有透明背景的 webview。
这是我的网页视图
<WebView
android:id="@+id/chartView"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight=".10"
android:background="@drawable/chart_bg" >
</WebView>
我将以下属性应用到 Web 视图以加载图表
layoutView.getSettings().setJavaScriptEnabled( true );
layoutView.requestFocusFromTouch();
layoutView.setBackgroundColor(Color.TRANSPARENT);
layoutView.getSettings().setBuiltInZoomControls( true );
layoutView.getSettings().setLoadWithOverviewMode(true);
layoutView.getSettings().setUseWideViewPort(true);
我在这里将我的 webview 转换为图像
private void saveWebView() {
//Resize the webview to the height of the webpage
int pageHeight = layoutView.getContentHeight();
LayoutParams browserParams = layoutView.getLayoutParams();
layoutView.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT, pageHeight));
//Capture the webview as a bitmap
layoutView.setDrawingCacheEnabled(true);
Bitmap bitmap = Bitmap.createBitmap(layoutView.getDrawingCache());
layoutView.setDrawingCacheEnabled(false);
//Create the filename to use
String randomFilenamepart = String.valueOf(new SecureRandom().nextInt(1000000));
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();
Log.d("debug", "Screenshot taken successfully");
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
layoutView.setLayoutParams(browserParams);
}
}
通过这个,我尝试捕获 Web 视图以及下面的背景 Android 4.3 没问题。但是在 Android 4.4 kitkat 上,我捕获了 webview 图像,但它没有给出 webview 的背景。只是它用黑屏显示网络数据(不是我的背景图片)
我该如何解决?
我用另一种方法解决了我的问题。为了将背景图像设置为 Web 视图,我将背景图像应用到我的 D3 图表。并删除了我的网络视图的背景颜色..
代码如下:
<WebView
android:id="@+id/chartView"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight=".10" >
</WebView>
Web 视图属性
layoutView.getSettings().setJavaScriptEnabled( true );
layoutView.requestFocusFromTouch();
layoutView.getSettings().setBuiltInZoomControls( true );
layoutView.getSettings().setLoadWithOverviewMode(true);
layoutView.getSettings().setUseWideViewPort(true);
我通过HTML(图表输入)应用背景
<style> body { overflow-y:scroll; background:url(css/date_input_bg.png) no-repeat; } </style>
现在它对我有用..但我仍然很惊讶为什么背景和背景颜色都不适用于下面的 Android 4.4!
我有一个使用 webview 显示 D3 图表的应用程序。这是我用于图表的 url 示例:http://nvd3.org/livecode/index.html#codemirrorNav
我能够加载图表并截取该图表的屏幕截图。但是这里 android 4.4 的问题是无法捕获带有透明背景的 webview。
这是我的网页视图
<WebView
android:id="@+id/chartView"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight=".10"
android:background="@drawable/chart_bg" >
</WebView>
我将以下属性应用到 Web 视图以加载图表
layoutView.getSettings().setJavaScriptEnabled( true );
layoutView.requestFocusFromTouch();
layoutView.setBackgroundColor(Color.TRANSPARENT);
layoutView.getSettings().setBuiltInZoomControls( true );
layoutView.getSettings().setLoadWithOverviewMode(true);
layoutView.getSettings().setUseWideViewPort(true);
我在这里将我的 webview 转换为图像
private void saveWebView() {
//Resize the webview to the height of the webpage
int pageHeight = layoutView.getContentHeight();
LayoutParams browserParams = layoutView.getLayoutParams();
layoutView.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT, pageHeight));
//Capture the webview as a bitmap
layoutView.setDrawingCacheEnabled(true);
Bitmap bitmap = Bitmap.createBitmap(layoutView.getDrawingCache());
layoutView.setDrawingCacheEnabled(false);
//Create the filename to use
String randomFilenamepart = String.valueOf(new SecureRandom().nextInt(1000000));
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();
Log.d("debug", "Screenshot taken successfully");
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
layoutView.setLayoutParams(browserParams);
}
}
通过这个,我尝试捕获 Web 视图以及下面的背景 Android 4.3 没问题。但是在 Android 4.4 kitkat 上,我捕获了 webview 图像,但它没有给出 webview 的背景。只是它用黑屏显示网络数据(不是我的背景图片)
我该如何解决?
我用另一种方法解决了我的问题。为了将背景图像设置为 Web 视图,我将背景图像应用到我的 D3 图表。并删除了我的网络视图的背景颜色..
代码如下:
<WebView
android:id="@+id/chartView"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight=".10" >
</WebView>
Web 视图属性
layoutView.getSettings().setJavaScriptEnabled( true );
layoutView.requestFocusFromTouch();
layoutView.getSettings().setBuiltInZoomControls( true );
layoutView.getSettings().setLoadWithOverviewMode(true);
layoutView.getSettings().setUseWideViewPort(true);
我通过HTML(图表输入)应用背景
<style> body { overflow-y:scroll; background:url(css/date_input_bg.png) no-repeat; } </style>
现在它对我有用..但我仍然很惊讶为什么背景和背景颜色都不适用于下面的 Android 4.4!