gpt4 book ai didi

Android:在 WebView 中缩放 SVG

转载 作者:太空狗 更新时间:2023-10-29 15:10:55 28 4
gpt4 key购买 nike

我对 WebView 和 SVG 有疑问。当我将 svg(使用 javascript)加载到 WebView 中时,它会随机缩放。绝对随机地在不同的设备上和一台设备上的不同屏幕方向。我需要将 SVG 放置在 WebView 中,并将 fot 设置为 WebView 大小,并启用缩放。试过这个 html:

<html xmlns="http://www.w3.org/1999/xhtml">
<body>
<object type="image/svg+xml" data="AutomobileMain.svg" width="100%" height="100%" align="middle">
<param name="src" value="AutomobileMain.svg" />
<param name="wmode" value="transparent" />
</object>
</body>
</html>

它在浏览器中正常工作,但在 WebView 中不工作。

代码如下:

public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
mSchemeImageWebView = (WebView) inflater.inflate(
R.layout.newremark_image, container, false);

WebSettings webSettings = mSchemeImageWebView.getSettings();
webSettings.setJavaScriptEnabled(true);
webSettings.setBuiltInZoomControls(true);
webSettings.setSupportZoom(true);

webSettings.setCacheMode(WebSettings.LOAD_NO_CACHE);
webSettings.setAppCacheEnabled(false);

mSchemeImageWebView.addJavascriptInterface(new IJavascriptHandler(),
"android");

mSchemeImageWebView.setWebViewClient(new WebViewClient() {
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
prepareResizedToFit(mSchemeImageWebView);
}

});

reloadWebView() ;

return mSchemeImageWebView;
}

public void reloadWebView() {
mSchemeImageWebView.loadUrl(getSchemePath()) ;
}

private void prepareResizedToFit(WebView webView) {
webView.setInitialScale(scale(mSchemeImageWebView));
}

private int scale(View view) {
int height = Math.round(view.getHeight()) ;
int width = Math.round(view.getWidth()) ;
Dimension parsedDimension ;
try {
parsedDimension = new SVGDimensionsParser().parse(getResources()
.getAssets().open(getSchemeFileName())) ;
double scaleXtoMax = width / parsedDimension.width ;
double scaleYtoMax = height / parsedDimension.height ;
double scale = Math.min( scaleXtoMax , scaleYtoMax ) ;
return (int) ( scale * 100.0 ) ;
} catch (Exception e) {
return 100;
}
}

private static class SVGDimensionsParser {
public Dimension parse(InputStream in) throws XmlPullParserException,
IOException {
try {
XmlPullParser parser = Xml.newPullParser();
parser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES,
false);
parser.setInput(in, null);
parser.nextTag();
return readFeed(parser);
} finally {
in.close();
}
}

private Dimension readFeed(XmlPullParser parser)
throws XmlPullParserException, IOException {
if (parser.getName().equals("svg")) {
return new Dimension(
Double.parseDouble(parser.getAttributeValue(null,
"height").replaceAll("px", "")),
Double.parseDouble(parser.getAttributeValue(null,
"width").replaceAll("px", "")));
} else {
return null;
}
}
}

最佳答案

您可能会看到设备像素比的影响因设备而异。

尝试将以下内容添加到 HTML 文件的 header 中。

<meta name="viewport" content="width=device-width, initial-scale=1">

如果这不起作用,则可能是您的 SVG 文件的编写方式有问题。 SVG 在窗口中的定位方式会受到根的各种属性的影响 <svg>元素。特别是 viewBox、width、height 和 preserveAspectRatio 属性。

尝试修补它们。有关它们如何工作的更多信息,请参阅 SVG 规范。

http://www.w3.org/TR/SVG/struct.html#SVGElement

关于Android:在 WebView 中缩放 SVG,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16587540/

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