开发思路
由于之前在网上看到了这样一份简历:作者把自己的经历采用类似于地图搜路径的方式呈现了出来,大致排版与Google Map很像,左边是模拟搜索后的文字版路径,右边则是地图中各个关键节点,一页纸就把自己的经历以一种很巧妙的形式展现了出来。当时看了之后,觉得作者很有创意,接着就自己在琢磨,他的简历最终是静态的pdf或者word形式,既然是以地图搜索的形式,能不能动态展现自己的经历呢:点击左边的某个具体点,右边地图上会有反馈,并且点击点图上的节点,会有该阶段个人的一个详细经历。
想要有这样的效果,在网页上呈现,那html,js,css知识肯定是必不可少的。由于自己对于Android开发的兴趣比较大,初学编程接触的也是Java和Android,所以后来的想法就是,这样一份简历能不能最终以APP的形式呈现出来。
有了想法的改变后,如何实现是接下来思考的问题。考虑到手机屏幕较小,原本在电脑端可以以一个版面呈现的简历在手机上要分成这样几个界面:
- 初始搜索界面(类似于地图首页搜索)
- 路径(人生经历)呈现界面
- 每个人生阶段的地图界面
- 该人生阶段的具体介绍界面
上面的想法是借鉴手机上地图应用的逻辑:进入应用会有搜索框,搜索之后给出多重路径规划,针对某个路径会有具体的导航。至于该人生阶段的具体介绍界面,则会通过点击地图上的Marker来呈现一个界面。
具体实现过程
初始搜索界面
1.输入“包建峰”,点击“搜索”按钮。这个操作背后会有这样几个动作:
- 在地图上绘制全部路径和Marker,想要达到在地图上整体呈现我的人生轨迹的效果
- 将后续要用到的数据分类存入数据库中,包括地点名称、经纬度、人生经历的具体描述
- 出现一个圆形“出发”按钮,点击后可以进入“路径(人生经历)呈现界面”
2.第一个界面没有较大难点,动画效果也只有地图从远到近的缩放效果
路径(人生经历)呈现界面
1.采用ScrollView并且里面有多层嵌套的LinearLayout来完成横向竖向都有的内容布局,主要内容是个人在每个地点的主要学习和工作职责。
2.每个地点都有一个点击事件,分别指向地图界面对应的城市位置
每个人生阶段的地图界面
1.上一个Activity的不同点击事件会传来不同的Integer值,由此Integer值判断地图界面应该处于哪个城市,进而移动到目标位置区域并画上Marker
2.ViewPager可以让地图顶端的地点进行左右滑动,以此来出发地图上位置的改变,注意这里要重写ViewPager.OnPageChangeListener
中的onPageSelected
方法,而PlaceHolderFragment
类中的onCreateView
方法仅仅是用来加载ViewPager上的内容,并且会预加载下一个或者上一个view,position最后的值不是当前位置,所以不适合在该方法里面触发位置改变。
3.除了滑动操作之外,也可以点击左右的箭头按钮前进到下一个地点或后退到上一个地点。需要注意的是当地点处于起点或者终点时,只有向前按钮或者只有后退按钮,这个逻辑判断请见下面一段代码示例:
|
|
4.Marker点击事件,会跳转到Dialog样式的Activity里,呈现在该地点的具体个人经历
该人生阶段的具体介绍界面
1.虽然是Activity,但是想要一种临时弹出Dialog的效果,所以就自定义了Activity的大小,代码如下:
|
|
2.由于同时使用了ListView和ScrollView会造成冲突,所以写了一个MyListView
继承ListView,并且重写了ListView的onMeasure
方法,代码如下:
|
|
3.为了主要任务和达成情况滚动到顶部时有悬停的效果,需要写一个StickyScrollView
继承ScrollView。代码请看JeffinBaoCV中的StickyScrollView.java
问题总结
1.BaseTransformer.java
里面的onPreTransform
方法需要进一步理解体会
2.MyListView.java
里面onMeasure
方法中Integer.MAX_VALUE>>2
的作用?
3.StickyScrollView
里面showStickyView
方法需要进一步理解体会
4.StickyScrollView
里面第一个构造函数为什么要用this(context,attrs,0);
,有什么具体作用吗?