我的首个电子书软件--嘎嘎读书 的开发(三)

来源:互联网 发布:飞鸽传书网络打印机 编辑:程序博客网 时间:2024/05/21 06:17

         接上篇,这篇文章接着介绍书架页,不过附带将菜单页也一起说了吧,毕竟两个页面功能是在一起的。大家一定体验过一些软件的侧边栏效果,比如人人网客户端 百度美拍等等。我就仿照做了这样一个效果。效果图如下哦~

侧边栏效果

          上篇文章中,关于书架的布局其实只是这个页面布局的一部分,其实另一部分就是图上显示的左大半边的菜单布局,布局还比较简单,就是用相对布局,将上篇讲到的书架布局和菜单布局叠加在一起,然后触发显示菜单请求的时候做一个平移的线性动画效果,将上层的书架布局移动到菜单布局的右侧。当触发隐藏菜单请求的时候 再做一个平移线性动画效果,将书架布局还原。下面是完整的首页布局文件。

         外层RelativeLayout 中有两个 LinearLayout  第一个就是底层的菜单布局 包含上面一张装饰图片,还有下方的菜单列表,当然是listview。 第二个就是昨天已经看到的书架的布局。接下来我先分别介绍一下书架 和 菜单的内容实现,最后来说怎么添加动画效果。

书架有了布局之后,主要是如何组装listview,这里当然是要自定义一个adapter,并构建一个和图形界面对应的数据结构,我们发现一行有三本书,可缺省,所以我们把原先封装好的Bookbean进行组合,三个bookBean组成一组,作为书架一行所对应的数据模型,我定义这个模型为BookShelfBean:

         而在activity中 则需要一个和listview绑定的list   里面的元素都是 BookShelfBean类型   即private List<BookShelfBean> bookshelfBeanList;

         然后建立一个内部的Adapter 绑定listView ,我编写的Adapter 类 如下,我们知道每个adapter最重要的部分是 重写getView方法,大家可以分析一下我所编写的getView方法。

         getView方法中,首先取出对应的bookshelfbean,然后遍历出左中右的bookbean,根据bookbean的信息,改变item布局中对应部分的图片,以及事件绑定等。bookbean中存在一个特殊的的bookbean对象,这个对象不是真正的书籍,而是放在书籍最后的一个加号图片,这个特殊的bookbean是在初始化bookshelfBeanlist时当书架系统中最后一本书之后加入这本特殊的“书”。

         listview绑定此adapter后,就会出现第一篇文章中展示的书架情形,只是,应该只有那个加号的图片,因为我们书架系统中还没有图书,不过,我们会在以后添加书籍进去,现在,先想象一下以后的样子吧。
        接下来是菜单页。菜单页是整个软件的导航,从这个页面可以链接入所有其他页面。菜单列表我选用在asset文件夹下的一个文件配置,先展示下这个文件。
        从这个文件可以看出,其实是用json格式配置的一个列表的基本信息,每个item对应的显示名,链接的activity 还有传递的参数。通过解析这个文件 我们可以初始化与菜单列表的listview绑定的数据list 我称为tabHostMsgBeanList。内部放置的元素为TabHostMsgBean,这个类是单个菜单元素对应的数据模型:
         当然,我们同样需要一个adapter绑定此listview,不过这个相对比较简单,就不多说了。
        如此一来菜单页也成型,是不是没有什么复杂的技术呀?哈哈,android就这么简单,除了......调页面ui    TMD比较麻烦。同感的举手。
        接下来是最重要的部分之一,就是制作侧边栏的效果。这里需要引入的知识点是关于 Animation的,如果不太熟悉这个知识的同学先去度娘一下吧,或者看接下来我代码片段中,能看懂也行,哈哈。
appLayout 就是书架布局部分,绑定一个事先设计好的动画,比较重要的一点是,在动画结束的时候,需要调用 appLayout.layout方法,来重写绘制layout的焦点,不然会出现的情况是,书架看起来跑到一边去了,但按钮 书架上的书籍 等控件触发事件的位置还在原先的位置。这是查了好多资料才看到的,这里写出来分享给大家,我可很无私的哟!哈哈
        啰啰嗦嗦讲了这么多,大家肯定觉得烦了,我下面会将书架页对应的activity的完整代码贴出来。大家不懂的地方就研究下面的代码好了,上面讲的都是一些基础的东西,有些细节的地方自然没有说到。
        细心的读者应该发现 这个activity并不是继承自app activity类 而是 ActivityGroup类,这个地方也是必须的,至于原因,我给忘记了哟,但是我确定这个地方必须使用 ActivityGroup不然真的有问题,大家可以实验一下,然后告诉我为什么一定要用 ActivityGroup哦!哈哈,偷下懒~
       好了!终于啰嗦完了,可能还有地方说的不清楚,但就我这语文水平真的已经尽力了,如果大家有任何问题都可以给我留言,我有空一定会回复!下一篇文章我们来讲介绍页,我称为“随便看看”页,哈哈~

0 0
原创粉丝点击