小翻页,大学问:QQ阅读器背后的故事交互设计 -电脑资料

电脑资料 时间:2019-01-01 我要投稿
【www.unjs.com - 电脑资料】

   

    细节决定成败

    对于阅读器而言,舒适的体验是产品成功的重要因素之一,

小翻页,大学问: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 - 手值滑动页角到达的位置c - 当前页书边与水平边的交点b - 当前页书边与垂直边的交点m - 当前页开始的的起始点注:abc和mbc是相同的直角三角形 A-把书页翻起来后看到的背面区域B-把书页翻起来后看到的下一页的一角C-当前页的可见部分。

    其中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/

最新文章