当我们在用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.
在这个函数里我加上这么一段:
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进行拦截了,然后进行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操作具体路线找全了,至于更详细的操作还需要进一步分析。
分享到:
相关推荐
Android browser源代码 /android/packages/apps/browser /android/packages/providers/DownloadProvider /android/frameworks/base/core/java/android/webkit
Android的文件浏览器/文件选择器,可以集成到应用程序中,从内部/外部存储中浏览/选择文件。
"FOSS Browser" is fully free/libre (as in freedom) Android app. The source code is public on Github. The app also does not need any unnecessary permissions. A simple Android browser based on webview. ...
用图片清晰讲解Android Browser的主要流程,有利于更加深入了解Android的底层原理
Android Browser 源码
系统自带Browser 用于参考 系统自带Browser 用于参考 系统自带Browser 用于参考
Phaseout / Phoenix / Podkicker / Pogo / Polaris / Prismb4 / PS4 Web Browser / QQ / QQBrowser / QtWeb Internet Browser / QupZilla / rekonq / retawqc / RockMelt / Ryouko / SaaYaa Explorer / Safari / ...
Webkit,Android Brower的主要类图和时序图
Android_browser_19.1.0.5
关于android browser 的时序图,比较详细、深入,需要仔细对比代码分析和理解。
一个Android Browser源代码.
Visual Browser for C/C はコードフローチャートになること 及び視覚化のC/C コードブラウザ統合プログラムコード編集者、 検光子およびドキュメンテーション発電機である。 それはプログラマーが拾い読みし、 C/C ...
android Browser代码分析,包含UML图,从UI层一直跟踪到webkit层,通俗易懂,是对需要对Browser开发人员参考工具
Android 4.0 Browser源码,改代码为Android 4.0 系统网络浏览器源代码。
You can visit my blog site http://mogoweb.github.io/mogo-browser/ for more information, but written in Chinese. Why you need In 2015, Google releases full source of chromium for android, including ...
360安全浏览器,提供更好更快的极速网页浏览体验
android手机调用浏览器的实例程序,可以导入ADT运行。
android browser 源码直接导入eclipse中可以使用,附带流程图解,导入eclipse中直接可以使用,缺少的库文件都补上了,位置可能需要自己修改一下
浏览器(com.android.browser).bak
android源码之Browser,最新的,欢迎下载