在我当前的项目中,我需要我的用户能够滚动并放大大型 SVG 图像。我遇到的一个主要问题是 android WebView 类对放大和缩小的限制。有什么办法可以根据自己的喜好删除或更改这些限制?标准缩放控件似乎不支持释放这些边界。
如果我的问题不清楚,或者我需要详细说明我的问题,请不要犹豫。
问候,沃塔
在我当前的项目中,我需要我的用户能够滚动并放大大型 SVG 图像。我遇到的一个主要问题是 android WebView 类对放大和缩小的限制。有什么办法可以根据自己的喜好删除或更改这些限制?标准缩放控件似乎不支持释放这些边界。
如果我的问题不清楚,或者我需要详细说明我的问题,请不要犹豫。
问候,沃塔
由于似乎没有人提出与使用反射不同的解决方案 - 我目前不知道有任何替代方案 - 我编写了一个快速代码片段,说明如何绕过放大操作的上限。
请注意,下面的代码仅适用于 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);