Android Browser zoom In/Out 分析
2009-12-14 00:12
471 查看
当我们在用browser浏览网页的时候,上下拖动页面,就会出现一个放大缩小的按键了。
现在要在browser上做multi-touch,可以用两个手指对页面进行放大缩小操作,现在既然已经存在了现在的放大缩小功能,我只要能够
找到它相应的操作就行了。
主要的操作都是在framework下面:WebView.java.
在类WebView的说明里就有一段:
To enable the built-in zoom, set
* {@link #getSettings() WebSettings}.{@link WebSettings#setBuiltInZoomControls(boolean)}
可以通过这个选择开启还是关闭zoom功能。
在查找的过程中找到了:
/**
* Perform zoom in in the webview
* @return TRUE if zoom in succeeds. FALSE if no zoom changes.
*/
public boolean zoomIn() {
// TODO: alternatively we can disallow this during draw history mode
switchOutDrawHistory();
return zoomWithPreview(mActualScale * 1.25f);
}
/**
* Perform zoom out in the webview
* @return TRUE if zoom out succeeds. FALSE if no zoom changes.
*/
public boolean zoomOut() {
// TODO: alternatively we can disallow this during draw history mode
switchOutDrawHistory();
return zoomWithPreview(mActualScale * 0.8f);
}
后来对browser进行调试,在这里设了断点,这里就是zoom in 和zoom out的处理函数了。
找到了这个我就要对browser进行一个简单的测试了:
在BrowserActivity.java里有一个onKeyDown函数,被Override,这个函数可以用来接收按键事件,我就用按下0和1能对应zoom in和zoom out.
在这个函数里我加上这么一段:
这样就可以对按键0和1进行拦截了,然后进行zoomIn和zoom out操作了。
编译,打包,测试,果然和我想的一样,按下0,1后分别会进行zoom in 和zoom out操作了。
测试到这里以后multi-touch也按这种方式处理就行了。
在显示zoom in/out的同时,browser上还会显示,一个“1X”和“X”大概这样的两个按钮,这两个按键又是在哪里进行处理的呢?
继续调试,运气很好,我之前在zoomWithPreview();打了断点,按下“1X”后,就跑到这个函数了,从debug stack中很容易就找到了前面跑过的一些函数了:
最主要的就是这个了:
private void initZoomController(Context context) {
// Create the buttons controller
mZoomButtonsController = new ZoomButtonsController(this);
mZoomButtonsController.setOnZoomListener(mZoomListener);
// Create the accessory buttons
LayoutInflater inflater =
(LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
ViewGroup container = mZoomButtonsController.getContainer();
inflater.inflate(com.android.internal.R.layout.zoom_browser_accessory_buttons, container);
mZoomOverviewButton =
(ImageView) container.findViewById(com.android.internal.R.id.zoom_page_overview);
mZoomOverviewButton.setOnClickListener(
new View.OnClickListener() {
public void onClick(View v) {
mZoomButtonsController.setVisible(false);
zoomScrollOut();
if (mLogEvent) {
Checkin.updateStats(mContext.getContentResolver(),
Checkin.Stats.Tag.BROWSER_ZOOM_OVERVIEW, 1, 0.0);
}
}
});
mZoomFitPageButton =
(ImageView) container.findViewById(com.android.internal.R.id.zoom_fit_page);
mZoomFitPageButton.setOnClickListener(
new View.OnClickListener() {
public void onClick(View v) {
zoomWithPreview(1f);
updateZoomButtonsEnabled();
}
});
}
这里面分别对”1X”,”X”设置了OnClickListener,具体怎么操作我还没看。
找到这里,就算将Browser的zoom操作具体路线找全了,至于更详细的操作还需要进一步分析。
现在要在browser上做multi-touch,可以用两个手指对页面进行放大缩小操作,现在既然已经存在了现在的放大缩小功能,我只要能够
找到它相应的操作就行了。
主要的操作都是在framework下面:WebView.java.
在类WebView的说明里就有一段:
To enable the built-in zoom, set
* {@link #getSettings() WebSettings}.{@link WebSettings#setBuiltInZoomControls(boolean)}
可以通过这个选择开启还是关闭zoom功能。
在查找的过程中找到了:
/**
* Perform zoom in in the webview
* @return TRUE if zoom in succeeds. FALSE if no zoom changes.
*/
public boolean zoomIn() {
// TODO: alternatively we can disallow this during draw history mode
switchOutDrawHistory();
return zoomWithPreview(mActualScale * 1.25f);
}
/**
* Perform zoom out in the webview
* @return TRUE if zoom out succeeds. FALSE if no zoom changes.
*/
public boolean zoomOut() {
// TODO: alternatively we can disallow this during draw history mode
switchOutDrawHistory();
return zoomWithPreview(mActualScale * 0.8f);
}
后来对browser进行调试,在这里设了断点,这里就是zoom in 和zoom out的处理函数了。
找到了这个我就要对browser进行一个简单的测试了:
在BrowserActivity.java里有一个onKeyDown函数,被Override,这个函数可以用来接收按键事件,我就用按下0和1能对应zoom in和zoom out.
在这个函数里我加上这么一段:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | Log.v(LOGTAG, "onKey,keyCode:"+keyCode); final WebView webView = getTopWindow(); switch (keyCode) { case KeyEvent.KEYCODE_0: Log.v(LOGTAG, "KEYCODE_0,zoomIn"); webView.zoomIn(); return true; //break; case KeyEvent.KEYCODE_1: Log.v(LOGTAG, "KEYCODE_1,zoomOut"); webView.zoomOut(); return true; //break; default: break; } |
编译,打包,测试,果然和我想的一样,按下0,1后分别会进行zoom in 和zoom out操作了。
测试到这里以后multi-touch也按这种方式处理就行了。
在显示zoom in/out的同时,browser上还会显示,一个“1X”和“X”大概这样的两个按钮,这两个按键又是在哪里进行处理的呢?
继续调试,运气很好,我之前在zoomWithPreview();打了断点,按下“1X”后,就跑到这个函数了,从debug stack中很容易就找到了前面跑过的一些函数了:
最主要的就是这个了:
private void initZoomController(Context context) {
// Create the buttons controller
mZoomButtonsController = new ZoomButtonsController(this);
mZoomButtonsController.setOnZoomListener(mZoomListener);
// Create the accessory buttons
LayoutInflater inflater =
(LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
ViewGroup container = mZoomButtonsController.getContainer();
inflater.inflate(com.android.internal.R.layout.zoom_browser_accessory_buttons, container);
mZoomOverviewButton =
(ImageView) container.findViewById(com.android.internal.R.id.zoom_page_overview);
mZoomOverviewButton.setOnClickListener(
new View.OnClickListener() {
public void onClick(View v) {
mZoomButtonsController.setVisible(false);
zoomScrollOut();
if (mLogEvent) {
Checkin.updateStats(mContext.getContentResolver(),
Checkin.Stats.Tag.BROWSER_ZOOM_OVERVIEW, 1, 0.0);
}
}
});
mZoomFitPageButton =
(ImageView) container.findViewById(com.android.internal.R.id.zoom_fit_page);
mZoomFitPageButton.setOnClickListener(
new View.OnClickListener() {
public void onClick(View v) {
zoomWithPreview(1f);
updateZoomButtonsEnabled();
}
});
}
这里面分别对”1X”,”X”设置了OnClickListener,具体怎么操作我还没看。
找到这里,就算将Browser的zoom操作具体路线找全了,至于更详细的操作还需要进一步分析。
相关文章推荐
- Android Bitmap zoomIn/zoomOut/rotate ——图片的缩小,放大 和旋转(转)
- android页面切换效果zoomin、zoomout
- google地图 for android 动态桌面放大缩小 zoom in/out
- Android Bitmap zoomIn/zoomOut/rotate ——图片的缩小,放大 和旋转
- 【Android】【内存】java.lang.OutOfMemoryError 问题分析
- android webview setBuiltInZoomControls 与 onTouch 冲突解决
- Android Browser App 源码分析(二)
- Receiver not registered: android.widget.ZoomButtonsController crash android 分析与解决方案
- Android远程接口之AIDL——Parcelable、in、out、inout简例
- how to zoom in/out in mac
- -zoom-in、zoom-out与图形放大、图形缩小的差别
- Windows Phone 7 - Image加上Zoom in/out功能 缩放功能
- DHTML Zoom In and Out Script
- android原生browser分析(一)--Application
- Android2.3 SDK编译出现Multiple substitutions specified in non-positional format的分析
- Android AIDL中的in,out,inout含义
- Android2.3 SDK编译出现Multiple substitutions specified in non-positional format的分析
- 【Android】【内存】java.lang.OutOfMemoryError 问题分析
- How To Open An URL In Android’s Web Browser