`
花籽的泪
  • 浏览: 9743 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类

QQ阅读器技术框架解析之二《代码预览和分析》

阅读更多
本文主要分析书架模块的原理和模型
书架的整体分为书架、书城、账户,统一到一个Activity为:MainActivity,继承TabActivity
public class MainActivity extends TabActivity implements CompoundButton.OnCheckedChangeListener, cu, m

书架的整体布局是TabHost,布局文件为maintabs.xml,整体分布如图

分别对应
书架:BookStandActivity.java
书城:WebBrowser.java
账户:ProfileActivity.java
本地:点击出现本地文件浏览窗口


本文主要介绍书架的架构
BookStandActivity extends ReaderBaseActivity implements DialogInterface.OnCancelListener, View.OnCreateContextMenuListener

入口函数:onCreate
1. 设置notitle(这个可以放到activity的配置文件中)
2. 设置layout为new_bookstand.xml:顶部阴影,两侧图片中间是自定的listview:com.qq.reader.view.SpringListView.java,这个list是可以支持整体滑动效果的,从1.0版本到现在始终是这个listview。
3. 初始化listview的适配器
   1. 获取屏幕宽度,除以每本所占的宽度,计算每行可以展示书本个数cols,这样解决了多种屏幕展示的问题
   2. 获取屏幕高度,除以每行书架所占的高度,计算每屏幕可以展示的书架行数rows,书架最小行数为cols+1;
   3. getCount即list的行数等于:(书本总个数 + 1)除以每行展示的个数;
   4. getView,单个视图为new_liner_item.xml,它其实是个linearLayout,用于存放单个书本的view,本质上是每行的容器,其中设置了背景等基本排版信息。
      1. 生成每本书的layout对象bookmarkstanditem.xml,渲染模板后,添加到父容器linearLayout中。直到填满每行展示的书本个数。
      2. 如果父容器已经存在,则便利父容器的子视图对象,逐一渲染
   5. getItem/getItemId,大家都懂得。
   6. listview添加了header,本质是textView,就是书架上方的广告栏,支持点击事件
   7. 书本的点击函数在哪里?
      1. 不可在listview上添加点击,因为书本知识listview每行中的一本,点击事件只能添加到每本书的布局视图上
      2. QQ的点击事件在书本视图的最外层RelativeLayout上,并把当前书本的id放在tag中,当点击书本时,点击函数从getItem传入tag,获取书本对象,打开书本。
   8. 书本的长按函数在哪里?
      1. 同样也在layout上,长按函数本质是图案出一个对话框,根据layout的tag中的书本id获取书本对象后,渲染dialog的内容。
   9. 书架左侧书本分类与广告都在listview的head视图中(standlist_header.xml)
      1. 本质也是对话框,通过设置进入和退出动画,给人的感觉是好像从书架延伸出来的一样。
      2. 点击分类名的核心代码
	@Override
	public final void onClick(View paramView) {
		((ListView) BookStandActivity.j(this.a)).setSelection(0);
		BookStandActivity.b(this.a, false);
		a.a(13, 0);
	}

          首先设置listview的当前选择项为0,然后展示对话框
  10. 书架下侧的本地文件浏览窗口
      1. 实现方式:SlidingDrawer(滑动抽屉)
public class SlidingDrawerFileBrowser extends SlidingDrawer implements View.OnCreateContextMenuListener, AbsListView.OnScrollListener

      2. 抽屉分为抽屉句柄和抽屉内部内容,点击句柄“本地”按钮,设置动画显示抽屉的内容,点击“返回”隐藏抽屉的内容
  • 大小: 52.2 KB
分享到:
评论

相关推荐

    QQ阅读器技术框架解析之一《代码预览和分析》

    这篇博客文章“QQ阅读器技术框架解析之一《代码预览和分析》”主要探讨了QQ阅读器在代码层面的一些关键技术和设计思路。 首先,我们关注的是“源码”这个标签,它意味着文章会深入到QQ阅读器的源代码中,揭示其内部...

    MFC开发的仿QQ表情的程序源代码

    - "源代码":程序的原始编写形式,可以被开发者阅读、修改和学习,以便理解程序的工作原理或进行二次开发。 【核心知识点】 1. **MFC库**:学习MFC需要掌握Windows编程基础,了解如何使用MFC的类来处理窗口、消息...

    mac 上解析和编辑math公式

    用户和开发者可以通过阅读源代码学习OC编程技巧,以及如何处理Math公式解析和显示的具体实现。 总的来说,这个项目涉及了Math公式解析技术、Objective-C编程、UI设计、文件操作和可能的开源社区参与。对于Mac用户和...

    SSH电子商务Demo

    通过阅读和修改代码,可以深入学习到Java Web开发的许多核心概念。 总之,SSH电子商务Demo是一个全面展示SSH框架集成的实例,它不仅展示了如何利用这些框架构建一个完整的电商系统,也为开发者提供了实战学习的机会...

    c++ logview源码自己学习使用

    源码中可能包含解析器模块,用于从原始日志数据中提取关键信息,如时间戳、日志级别、模块名和消息内容等。 2. **用户界面设计**:为了方便用户查看和搜索日志,LogView 往往会提供一个友好的图形用户界面。这涉及...

    COCOS2D_X粒子编辑器原码

    通过阅读和分析代码,你可以了解到如何在C++或 Lua 中操作粒子系统,如何处理用户输入以实现交互式编辑,以及如何利用窗口程序(如"particleTool_win32")来构建桌面应用程序。 对于有经验的开发者,这个编辑器原码...

    多功能工具箱微信小程序源码.rar

    【标题解析】:“多功能工具箱微信小程序源码.rar”这个标题揭示了我们即将探讨的核心内容:一个微信小程序的源代码,它被设计成一个具备多种功能的工具集合。"多功能工具箱"通常指的是一个应用程序,它整合了各种...

    实现二维码扫码源码

    "qzxing"是一个基于ZXing(Zebra Crossing)库的Android二维码扫描框架,ZXing是一个强大的、跨平台的条码阅读库。这个库支持多种条码格式,包括常见的QR码和Data Matrix,同时也支持一维条形码。 使用"qzxing"库...

    PDF转图片java内含demo和SDK.zip

    这两个库是IcePDF库的一部分,这是一个开源的Java PDF阅读器和处理框架。`icepdf-core`包含了PDF解析和渲染的基础组件,而`icepdf-viewer`则提供了用户界面相关的功能,如预览PDF文档。 `PdfToJpg.java`是包含的...

    二维码+CAlaryer+WKweb+controllers

    - **扫描**:通过相机捕获二维码图像并解析其内容,这通常涉及`AVCaptureSession`和`AVCaptureMetadataOutput`。用户只需对准二维码,系统就能自动识别并处理相关信息。 2. **CAlaryer**(可能是`CameraLayer`):...

Global site tag (gtag.js) - Google Analytics