2012-05-02 7 views
2

私の現在のプロジェクトでは、大きなSVG イメージをスクロールしてズームインできるようにする必要があります。私が遭遇した大きな問題は、アンドロイドWebViewクラスがズームインとズームアウトにかかる制限です。これらの制限を削除したり、自分の好みに合わせて変更することはできますか? 標準のズームコントロールは、これらの境界線の解放をサポートしていないようです。設定なしでAndroid Webviewのズームイン/ズームアウト

私の質問が不明な場合、または私の質問で詳しく説明する必要がある場合は、お気軽にお問い合わせください。

挨拶し、 Wottah

+0

これは、一般的なまたは特定のAndroidのフレーバーで動作する必要がありますか? 'WebView'のズームインの実装が、異なるリリースよりもかなり変更されているので私は尋ねています。この「制限」を回避するためにリフレクションを使用できるはずですが、さまざまなデバイス/ OSバージョンで動作させたい場合は、さまざまなケースの中から自分を準備してください。 –

+0

それはICS(4.0.3)で動作するように必要です。好ましくはタブレットデバイスとスマートフォンの両方に表示されます。私は現在、Asus EEEトランスプライムタブレットで自分のアプリケーションをテストしています。でも、私のアプリはSamsung Galaxy SIIのようなデバイスでも動作するようにしたい。すべてのAndroid搭載端末で機能する単一のソリューションはありませんか? – Wottah

答えて

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); 
+0

これはまさに私が必要としていたものです!ありがとう!!あなたは私のインターンシッププロジェクトの主要な問題の一つを修正することができました^^私のアプリケーションのいくつかの重要な機能は4.0でしか実装されていないため、私のアプリケーションはICSより低いバージョンで動作する必要はありません。私はこの問題について長年熟考してきました。このようにwebviewクラスを編集するために必要な情報がどのように得られたかを聞かせてもらえますか? (これは私の最初のアンドロイドプロジェクトですが、実際に入っています) – Wottah

+0

最終報告書のコピーを私に送ってください。 ;)このアプローチの情報がどこでどのように見つけられたかについては、Androidのソースについては[grepcode](http://grepcode.com/)を強くお勧めします。私は 'WebView'の内部動作を見てから、ZoomManagerに導いてくれました。最後の重要な要素は、説明変数名を持つことです。幸いなことにAndroidにはその傾向があります。これらの詳細が得られれば、上記のように実際の反映を実装するのは比較的簡単です。 –

+0

私はこれがすべてを文脈に入れるのに役立つのを見ています。報告書が出る限り:それはオランダにあるので、私はxDを何ができるのか見ていきます。 – Wottah

関連する問題