通过webview显示的Android本地图像模糊不清

时间:2011-06-29 00:07:58

标签: android image webview scaling

我有一个webview从assets /文件夹加载图像。图像显示为100%(或更多)缩放,并且与真实图像在100%时的清晰度不同

如何设置webview以显示缩小的图像而不降低质量?

另外,我正在使用webview,因为ImageView需要我重新创建平滑滚动,点按缩放,捏缩放等等

洞察力赞赏

3 个答案:

答案 0 :(得分:2)

我记得那个问题。 Webview可能会自动对较大的图像进行下采样,这可能是出于内存问如果要控制质量,可能必须使用ImageView。您也可以尝试使用图库应用程序。

答案 1 :(得分:1)

我找到了在webview中显示高质量图像的解决方案。 (让我知道我讨厌使用webview!)

根本原因: 开箱即用,在webview中没有XXHDPI和XHDPI的概念 - 如果你在XXHDPI或XHDPI设备上使用这些图像,那么图像太大了!所以你最终使用HDPI / MDPI图像...至少我做了,然后图像看起来很模糊。

解决方案说明: 在您的HTML中(我以编程方式在活动中创建它),启用缩放,然后以编程方式检测逻辑密度。计算比例(即XXHDPI设备上的300%)并将该值放入HTML中,否则您的字体将为TINY!在您的可绘制资源中,确保您使用的图形与设备的分辨率相匹配(即XXHDPI设备上的XXHDPI图像) - 这是提醒您替换XXHDPI res文件夹中的MDPI图像。

编码解决方案:

// constants needed to put together a nice Android webview-friendly page
private static final String HTML_STYLE = "<style>img{image-rendering: optimizeQuality;} html{font-size: [TBD]% !important}</style>";
private static final String HTML_META = "<meta name='viewport' content='initial-scale=1.0, maximum-scale=1.0, user-scalable=no; target-densitydpi=device-dpi' />";
private static final String HTML_HEAD = "<html><head><title>description</title>"+HTML_META+HTML_STYLE+"</head><body bgcolor=\"black\"><font color=\"white\">";
private static final String HTML_TAIL = "</font></body></html>";

// content to show in the webview
final String strBody = "<ul><li>stuff1</li><li>stuff2</li><li>stuff3</li></ul><p align=\"center\"><img src=\"file:///android_res/drawable/image.png\"></p>";

// get the logical font size
DisplayMetrics displaymetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
int iFontScale = (int) (displaymetrics.scaledDensity * 100.0f);

// alter the HTML to programmatically insert the font scale
final String strCompleteHTML = (HTML_HEAD+strBody+HTML_TAIL).replace("[TBD]", String.valueOf(iFontScale));

// configure the webview and load the HTML
final WebView myWebView = (WebView) findViewById(R.id.webview);
myWebView.setHorizontalScrollBarEnabled(false);
myWebView.getSettings().setJavaScriptEnabled(true);
myWebView.loadDataWithBaseURL("file:///android_asset/", strCompleteHTML, "text/html", "utf-8", null);

答案 2 :(得分:0)

不确定为什么需要所有那些相当复杂的答案?

我通过使用400px图像解决了200px图像模糊的问题,并在CSS中将其缩小了2倍。 DIV元素设置为200px和background-size:包含/ 200px 50px;为我解决了