2

在我当前的项目中,我需要我的用户能够滚动并放大大型 SVG 图像。我遇到的一个主要问题是 android WebView 类对放大和缩小的限制。有什么办法可以根据自己的喜好删除或更改这些限制?标准缩放控件似乎不支持释放这些边界。

如果我的问题不清楚,或者我需要详细说明我的问题,请不要犹豫。

问候,沃塔

4

1 回答 1

3

由于似乎没有人提出与使用反射不同的解决方案 - 我目前不知道有任何替代方案 - 我编写了一个快速代码片段,说明如何绕过放大操作的上限。

请注意,下面的代码仅适用于 ICS,可能还适用于 Honeycomb,但我目前没有平板电脑来检查内部工作是否依赖于同一个ZoomManager类。Gingerbread、Froyo 和 Eclair 似乎都或多或少地直接在WebView类中实现了缩放功能。通过下面的示例,添加一些代码以将这些操作系统也考虑在内应该相当容易。

// just set an Activity's content view to a single WebView for this test
WebView mWebview = new WebView(this);
setContentView(mWebview);

// retrieve the ZoomManager from the WebView
Class<?> webViewClass = mWebview.getClass();
Field mZoomManagerField = webViewClass.getDeclaredField("mZoomManager");
mZoomManagerField.setAccessible(true);
Object mZoomManagerInstance = mZoomManagerField.get(mWebview);

// modify the "default max zoom scale" value, which controls the upper limit
// and set it to something very large; e.g. Float.MAX_VALUE
Class<?> zoomManagerClass = Class.forName("android.webkit.ZoomManager");
Field mDefaultMaxZoomScaleField = zoomManagerClass.getDeclaredField("mDefaultMaxZoomScale");
mDefaultMaxZoomScaleField.setAccessible(true);
mDefaultMaxZoomScaleField.set(mZoomManagerInstance, Float.MAX_VALUE);
于 2012-05-08T10:26:07.947 回答