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

本文主要分析书架模块的原理和模型
书架的整体分为书架、书城、账户,统一到一个Activity为:MainActivity,继承TabActivity

public class MainActivity extends TabActivity implements CompoundButton.OnCheckedChangeListener, cu, m

书架的整体布局是TabHost,布局文件为maintabs.xml,整体分布如图
[img]http://dl.iteye.com/upload/attachment/0066/1908/0089400b-ecc1-3438-88bf-1630bb4b5d8d.png[/img]

分别对应
书架: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. 抽屉分为抽屉句柄和抽屉内部内容,点击句柄“本地”按钮,设置动画显示抽屉的内容,点击“返回”隐藏抽屉的内容
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值