`
dimple
  • 浏览: 95645 次
  • 性别: Icon_minigender_1
  • 来自: 辽宁
社区版块
存档分类
最新评论

Android Browser zoom In/Out 分析

 
阅读更多

当我们在用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 browser源代码 /android/packages/apps/browser /android/packages/providers/DownloadProvider /android/frameworks/base/core/java/android/webkit

    Android-FileBrowser-FilePicker,Android的文件浏览器/文件选择器,可以集成到应用程序中,从内部/外部存储中浏览/选择文件.zip

    Android的文件浏览器/文件选择器,可以集成到应用程序中,从内部/外部存储中浏览/选择文件。

    android Browser 流程分析图解

    在Android系统中,内置的Browser应用是用户浏览网页的主要工具,它基于WebKit渲染引擎,提供了基本的网页浏览功能。本文将深入解析Android Browser的主要流程,帮助读者理解其工作原理。 一、启动流程 1. 用户点击...

    Webkit,Android Browser的UML分析

    在Webkit和Android Browser的上下文中,类图可能会展示关键组件,如WebView(Android中的Webkit容器)、WebKitBridge(用于Android与Webkit间的通信)、RenderObject(处理布局和渲染)等。每个类可能包含属性(数据...

    android4.0 Browser 浏览器 源码

    Android 4.0 Browser是Android操作系统的一个重要组成部分,它提供了用户访问互联网的界面和功能。在深入探讨其源码之前,我们先理解一下Android 4.0(也称为Ice Cream Sandwich,简称ICS)的一些背景信息。 ...

    Android代码-FOSS Browser

    "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 源码

    9. **性能优化**:通过分析Android Browser的源码,我们可以学习到如何减少内存占用、提升渲染速度和节省电池寿命的技巧。 10. **测试框架和自动化测试**:源码中往往包含了测试代码,这些测试用例和测试框架的实现...

    android browser 图解

    通过对这些时序图的分析,我们可以深入了解Android Browser和WebKit如何协同工作,以及如何在不同的场景下优化性能和响应速度。这不仅有助于开发者调试和优化Web应用,也为设计更高效、更安全的浏览器提供指导。通过...

    Android-Browser.rar_android_android browser_browser_browser andr

    Android Browser是Android操作系统内置的网页浏览器,其源代码的分析能为我们揭示许多关于移动设备上网页浏览技术的细节。在Android系统中,Browser组件扮演着核心角色,它负责解析HTML内容,渲染网页,并提供用户...

    Android 8.0 系统自带Browser2

    通过上述分析,我们可以看到Android 8.0的Browser2不仅是一个基本的网页浏览工具,更是集性能、安全、隐私、智能和便捷性于一体的综合性浏览器。它体现了Android 8.0系统对用户体验的深入理解和持续改进,是Android...

    android browser 源码直接导入eclipse中可以使用

    3. **UI架构分析**:Android Browser的用户界面设计和事件处理机制也是学习的重点。源码中包含了Activity、Fragment和View的使用,以及它们之间的通信方式。 4. **性能优化**:通过查看源码,开发者可以学习到如何...

    android源码之Browser

    在Android系统中,Browser应用程序是默认的Web浏览器,它允许用户浏览互联网上的网页。深入理解Android源码中的Browser模块对于Android应用开发者来说至关重要,因为这能帮助他们优化网页加载性能,实现自定义功能,...

    Android 4.0 Browser源码

    Android 4.0 Browser源码分析 Android 4.0,也称为Ice Cream Sandwich (ICS),是Android操作系统的一个重要版本,引入了许多用户界面和功能改进。在这个版本中,内置的Browser应用进行了重大更新,提供了更流畅的...

    User-Agent库useragent.js.zip

    Phaseout / Phoenix / Podkicker / Pogo / Polaris / Prismb4 / PS4 Web Browser / QQ / QQBrowser / QtWeb Internet Browser / QupZilla / rekonq / retawqc / RockMelt / Ryouko / SaaYaa Explorer / Safari / ...

    android_browser.rar_android_android浏览器

    【标题】"android_browser.rar" 是一个针对 Android 平台的项目,专注于开发 Android 自带浏览器的调用和交互。这个压缩包包含了开发一个能够与 Android 系统浏览器交互的应用程序所需的所有源代码和配置文件。 ...

    NuDesign MIBrowser Pro 4.0 破解版

    NuDesign MIBrowser Pro 4.0 破解版,看MIB必备,自己在win7上安装实验过,可以的!

    android Browser 浏览器之代码分析里面含UML图 容易理解

    《Android浏览器代码分析:深入理解Browser机制》 在Android系统中,内置的Browser应用是用户访问互联网的重要途径。本文将通过详细的代码分析,配合UML(统一建模语言)图,帮助开发者深入理解Browser的工作原理,...

    Android Browser源代码

    Android Browser是Android操作系统内置的网页浏览器,其源代码是由Google官方提供的,这为开发者和研究人员提供了深入了解Android系统浏览器工作原理的机会。在这个压缩包中,包含了Browser项目的所有源代码文件,...

    android browser浏览器代码解析uml图

    在Android Browser的分析过程中,UML图能够清晰地展示其组件间的交互关系,帮助我们理解整个系统的架构。 1. **整体架构** Android Browser基于WebKit引擎,WebKit是开源的Web内容渲染引擎,负责解析HTML、CSS,并...

    android4.0 Browser浏览器 源代码

    Android 4.0 Browser浏览器源代码是Android操作系统中内置浏览器的开发基础,它包含了实现一个功能完备、高效、用户友好的Web浏览体验的所有组件。这个模块涵盖了应用层的源码,为开发者提供了一个深入理解Android...

Global site tag (gtag.js) - Google Analytics