细节决定成败
对于阅读器而言,舒适的体验是产品成功的重要因素之一,
小翻页,大学问:QQ阅读器背后的故事交互设计
。其中阅读界面,更是用户停留时间最长的界面,每一个动作,每一个细节都会直接影响到用户的感受。QQ阅读器(Android)从1.3版起重点增强了阅读界面的翻页体验,由原来的平移翻页演化成仿真翻页,追求舒适的极致体验。减法亦是加法
在选择翻页效果上,阅读器项目组内部进行多次PK和探索。为了保证阅读速度,我们使用了2D的翻页效果。虽然放弃了3D的效果,但是我们认为值得。android平台手机性能和参数参差不齐,要保证所有的用户都能体验这个功能,我们必须有所弃。
用户体验是硬道理。
翻页是每个用户阅读过程中都会使用,并且重复的动作,我们希望在用户视觉体验上呈现最佳的状态,不能有任何的瑕疵。针对翻页效果的细节,我们进行了深入的讨论和研究,力求达到快速、平滑、真实。
虽然每个用户习惯的培养都需要过程,但是可以肯定的说我们所做的仿真翻页效果在android平台上,对于用户本身就是个惊喜,很多的用户反馈都非常喜欢这个翻页效果,用户的肯定,让我们欣喜不以。
与同类的产品比较中,目前只有ireader有接近QQ阅读器的翻页效果。比较两个翻页效果后(视频对比:http://v.youku.com/v_show/id_XMjc0NjA1NTQ0.html),我们很自信,因为在android平台上,无论是体验、速度,还是性能,QQ阅读器决不输于任何的阅读器。虽然QQ阅读器起步比较晚,但我们一定会潜心修炼,赶超对手,让用户都真正享受到阅读带来的乐趣。
原理篇
在实现翻页效果之前,我们先整理一下思路*0*~~。翻页可以分为简单翻页和真实翻页
简单翻页效果图
真实翻页效果图(1)
真实翻页效果图(1)
从上面的效果图,我们不难发现,在简单翻页的基础上增加页边的曲线效果以及阴影效果,就可以表现出更加真实的翻页效果。
简单翻页效果的实现方式
明确了方向,我们来看看简单翻页是如何实现的。首先来看一张示意图(该部分以下所有的内容都是围绕这张图所陈述,千言万语都是为了它啊)。
其中a点是手指头在屏幕上的移动点,也就是触屏点。如果是从右向左翻的话,m点就是当前屏幕的右下角,一般坐标是(w,h)。其中abc和mbc是相同的直角三角形,bc是am的中垂线,可以根据a和m的位置计算出b,c的位置。
明确b,c的坐标以后,
电脑资料
《小翻页,大学问:QQ阅读器背后的故事交互设计》(https://www.unjs.com)。bmc三角形是翻开后下一页的显示内容。bca是当前页翻开后显示的背面。但是如何只画其中的一部分呢?感谢android,寻寻觅觅以后,在canvas中发现了clipPath方法。Path,顾名思义,是根据几个节点组成一条路径。在已知b,m,c点的坐标情况下,可以组成一条path。
具体的实现方式参考如下代码
这样就实现了在一个不规则形状内,在屏幕上画图的效果。
在每次刷新的时候重新计算b,c,a,的位置,从而可以实现手指头拽着页面的效果。
以上就是简单翻页效果实现的一些技术关键点。但这还不是我们最终想要的效果。两边的直线似乎过于生硬了,那怎样才能实现比较真实的翻页效果呢?
真实翻页效果实现方式
先从效果图说起。下面这张图是真实翻页效果的模拟图。跟简单图相比,很明显,两边的曲线起了作用。但是两边的曲线是如何画出来的呢?
bezier曲线
在揭晓谜底之前,我们先介绍bezier曲线。
如上图所示,p0和p2之间是一条曲线。这条曲线就是bezier曲线。这条曲线由3个点决定。
P0,起始点。P2,结束点。P1,控制点。
真实翻页效果图中页边的曲线就是由bezier曲线描绘出来的。如下图所示
其中a,b,c构成了一条bezier曲线。m,n,l组成了另一条。
哪在android中是如何实现bezier曲线的呢?
感谢android,在path对象中,有一个quadTo方法。
其中x1,y1就是P1控制点的坐标。x2,y2就是结束点的坐标。各位观众说怎么没有开始点的坐标呢?开始就是目前path路径中最后一个点的坐标。
这样,就完成应曲线的部分。还差什么呢?对,就是阴影。
画龙点睛阴影效果
阴影效果图
在android的paint对象中,提供了一个setshaderLayer的方法,可以快速的实现阴影效果。
只要先确定一个区域,调用该方法就可以在这个区域周围打上阴影。其中还有抗锯齿的设置,感兴趣的同学可以再深入研究一下。
参考资料
Bezier曲线
http://zh. .org/zh-cn/%E8%B2%9D%E8%8C%B2%E6%9B%B2%E7%B7%9A
关于阅读器之后的更多精彩和技术,请参考:
http://qqreader.qq.com/