AndroidのWebViewで,ズーム処理を自前で実装する方法.縮尺ごとに内容を切り替える場合などに使えると思います.
WebViewのズーム処理をカスタマイズする
電子国土の閲覧プログラムの関係で,WebViewが持っているズームバーは拝借して表示するが,
実際のズーム処理は自前で実装するということをやってみた.結構面倒だったのでメモ.
ズームバー ↓
概要
- WebViewの派生クラスを作る
- WebView#zoomIn(),WebView#zoomOut()をオーバーライドする
- WebSettings#setBuiltInZoomControls(true) にする
- ズームバーを出したいタイミング(タッチイベント)で,WebView#invokeZoomPicker() を呼び出す
実装
ビュークラス
import
android.app.Activity;
import
android.util.Log;
import
android.view.MotionEvent;
import
android.webkit.WebView;
import
android.webkit.WebViewClient;
public
class
CustomZoomWebView extends
WebView {
public
CustomZoomWebView(Activity act, String url) {
super
(act);
setFocusable(true
);
setFocusableInTouchMode(true
);
setWebViewClient(new
WebViewClient());
getSettings().setBuiltInZoomControls(true
);
loadUrl(url);
}
@Override
public
boolean
onTouchEvent(MotionEvent event) {
if
(event.getAction() == MotionEvent.ACTION_UP && event.getHistorySize() <= 1) {
// ズームバーを表示する
invokeZoomPicker();
}
return
true
;
}
@Override
public
boolean
zoomIn() {
// 自前のズームイン処理
Log.d("test"
, "zoomIn"
);
return
true
;
}
@Override
public
boolean
zoomOut() {
// 自前のズームアウト処理
Log.d("test"
, "zoomOut"
);
return
true
;
}
}
アクティビティからの呼び出し例
import
android.app.Activity;
import
android.os.Bundle;
import
android.view.ViewGroup;
import
android.view.ViewGroup.LayoutParams;
import
android.webkit.WebView;
public
class
TestAct extends
Activity
{
@Override
public
void
onCreate(Bundle icicle) {
super
.onCreate(icicle);
WebView webView = new
CustomZoomWebView(this
, "http://kamoland.com/rss.html"
);
setContentView(webView, new
LayoutParams(ViewGroup.LayoutParams.FILL_PARENT,
ViewGroup.LayoutParams.FILL_PARENT));
}
}
ズームバーを表示するタイミングの判定は,微妙です.
俺はこんな感じでいいかなと思ってますが,お好みに合わせて...