基于滚动控件实现内容物滚动的方法和装置与流程

文档序号:11707288阅读:191来源:国知局
基于滚动控件实现内容物滚动的方法和装置与流程

本发明涉及计算机技术领域,特别是涉及一种基于滚动控件实现内容物滚动的方法和装置。



背景技术:

“控件”,是gui(graphicaluserinterface,图形用户接口)界面的组成元素,每一个控件都有自己的功能和展现形式。滚动容器控件是一个带有滚动功能的容器控件,滚动容器控件通常带有一个“滚动条”。在手机屏幕上呈现的滚动容器控件,通常会根据手指的行为,连续地移动其中的内容物,例如:拖动时内容物跟着手移动,用力往上滑动放手后内容物像被抛出一样继续往前移动一段距离后停下来。传统的滚动控件中的内容物常常出现滚动不流畅的情况,在用户手放开后,滚动方向有时会不跟手指运动方向对应,有时还会向相反的方向运动。



技术实现要素:

基于此,有必要针对滚动控件中的内容物滚动不与手指运动方向对应的问题,提供一种基于滚动控件实现内容物滚动的方法,能使内容物滚动的方向与手指离开方向保持一致。

此外,还有必要针对滚动控件中的内容物滚动不与手指运动方向对应的问题,提供一种基于滚动控件实现内容物滚动的装置,能使内容物滚动的方向与手指离开方向保持一致。

一种基于滚动控件实现内容物滚动的方法,包括以下步骤:

接收接触事件,停止滚动滚动控件中的内容物并记录当前的内容物顶部坐标;

接收移动事件,获取移动事件中对应的触控坐标,并根据所述触控坐标计算并更新所述内容物顶部坐标,以使所述内容物随着所述内容物顶部坐标滚动;

接收抬起事件,并根据最后一次移动事件中计算得到的内容物顶部坐标判断是否执行惯性滚动;

若是,则确定触控离开速度,根据所述触控离开速度计算惯性滚动位移量,并根据所述最后一次移动事件中计算得到的内容物顶部坐标及所述惯性滚动位移量计算并更新惯性滚动过程中的内容物顶部坐标,以使所述内容物随着所述内容物顶部坐标滚动;

若否,则根据所述最后一次移动事件中计算得到的内容物顶部坐标判断是否执行回滚,若执行回滚,则获取回滚时刻,并根据所述最后一次移动事件中计算得到的内容物顶部坐标及所述回滚时刻计算并更新回滚过程中的内容物顶部坐标,以使所述内容物随着所述内容物顶部坐标滚动。

一种基于滚动控件实现内容物滚动的装置,包括:

接触模块,用于接收接触事件,停止滚动滚动控件中的内容物并记录当前的内容物顶部坐标;

移动模块,用于接收移动事件,获取移动事件中对应的触控坐标,并根据所述触控坐标计算并更新所述内容物顶部坐标,以使所述内容物随着所述内容物顶部坐标滚动;

抬起模块,用于接收抬起事件,并根据最后一次移动事件中计算得到的内容物顶部坐标判断是否执行惯性滚动;

惯性滚动模块,用于若执行惯性滚动,则确定触控离开速度,根据所述触控离开速度计算惯性滚动位移量,并根据所述最后一次移动事件中计算得到的内容物顶部坐标及所述惯性滚动位移量计算并更新惯性滚动过程中的内容物顶部坐标,以使所述内容物随着所述内容物顶部坐标滚动;

回滚模块,用于根据所述最后一次移动事件中计算得到的内容物顶部坐标判断是否执行回滚,若执行回滚,则获取回滚时刻,并根据所述最后一次移动事件中计算得到的内容物顶部坐标及所述回滚时刻计算并更新回滚过程中的内容物顶部坐标,以使所述内容物随着所述内容物顶部坐标滚动。

上述基于滚动控件实现内容物滚动的方法和装置,根据不同的事件以不同的方式计算内容物顶部坐标,使得在移动事件中的滚动、惯性滚动及回滚过程中,滚动控件中的内容物随着内容物顶部坐标的变化不断进行滚动;并且,在惯性滚动中,根据触控离开速度计算惯性滚动位移量,并计算惯性滚动过程中的内容物顶部坐标,能够根据接触物运动轨迹进行计算,使内容物滚动的方向与接触物离开方向保持一致,不会出现滚动方向与手指运动方向相反的情况,使滚动更流畅。

附图说明

图1为一个实施例中基于滚动控件实现内容物滚动的方法的流程示意图;

图2为一个实施例中滚动控件的示意图;

图3为一个实施例中计算移动事件中内容物顶部坐标的流程示意图;

图4(a)为一个实施例中内容物拉扯上边缘的示意图;

图4(b)为一个实施例中内容物拉扯下边缘的示意图;

图5为一个实施例中计算惯性滚动过程中的内容物顶部坐标的流程示意图;

图6为一个实施例中计算回滚过程中的内容物顶部坐标的流程示意图;

图7为一个实施例中基于滚动控件实现内容物滚动的装置的结构示意图;

图8为另一个实施例中基于滚动控件实现内容物滚动的装置的结构示意图;

图9为一个实施例中移动模块的内部结构示意图;

图10为一个实施例中惯性滚动模块的内部结构示意图;

图11为一个实施例中惯性滚动模块中的处理单元的内部结构示意图;

图12为一个实施例中回滚模块的内部结构示意图。

具体实施方式

为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。

如图1所示,一种基于滚动控件实现内容物滚动的方法,包括以下步骤:

步骤s110,接收接触事件,停止滚动滚动控件中的内容物并记录当前的内容物顶部坐标。

具体的,接触事件可包括手指或鼠标等接触物点击产生的点击事件、手指或手写笔等接触物触摸按下时产生的按下事件等。当接收到接触事件,即立即停止滚动滚动控件中的内容物,并记录当前的内容物顶部坐标及当前的触控坐标,其中,触控坐标指的是接触物所在的坐标。在本实施例中,触控坐标可仅考虑接触物在滚动控件竖直方向上的坐标。

在一个实施例中,在步骤接收接触事件,停止滚动滚动控件中的内容物并记录当前的内容物顶部坐标之前,还包括:预先建立滚动控件。

具体的,如图2所示,图2为一个实施例中滚动控件的示意图。滚动控件包括背景区域10和内容物区域20,内容物区域20叠加在背景区域10上,背景区域10和内容物区域20均为矩形,内容物区域20可在背景区域10上面上下移动。其中,x代表内容物顶部坐标,x*代表内容物底部坐标,h1为背景区域10的长度,h2为内容物区域20的长度,并令背景区域10的上边缘所在线的坐标为坐标起始点0。内容物区域20的长度h2大于背景区域10的长度h1,内容物底部坐标x*=x+h2,当滚动控件的内容物按照一定方向进行滚动时,内容物顶部坐标的x值会不断进行变化。

步骤s120,接收移动事件,获取移动事件中对应的触控坐标,并根据触控坐标计算并更新内容物顶部坐标,以使内容物随着内容物顶部坐标滚动。

具体的,当手指、鼠标或手写笔等接触物在屏幕上进行移动时,将触发一连串的移动事件,并形成移动轨迹。接收接触物在屏幕上进行移动时产生的多个移动事件,并获取每个移动事件中对应的触控坐标及移动时刻,其中,移动时刻指的是移动事件发生时操作系统给出的移动事件发生时间。根据当前移动事件中获取的触控坐标及在接触事件中记录的触控坐标计算出触控位移量,并根据该触控位移量计算新的内容物顶部坐标,以使滚动控件中的内容物随着新的内容物顶部坐标进行滚动。

如图3所示,在一个实施例中,步骤s120接收移动事件,获取移动事件中对应的触控坐标,并根据触控坐标计算并更新内容物顶部坐标,以使内容物随着内容物顶部坐标滚动,包括以下步骤:

步骤s302,获取当前的内容物顶部坐标与接触事件中对应的触控坐标。

具体的,令获取的当前的内容物顶部坐标为x0,接触事件中对应的触控坐标为p0。

步骤s304,接收移动事件,并获取移动时刻的新的触控坐标。

具体的,获取当前的移动事件中的移动时刻对应的新的触控坐标,并令新的触控坐标为p。

步骤s306,根据新的触控坐标及接触事件中对应的触控坐标确定触控位移量。

具体的,触控位移量为当前移动事件中对应的触控坐标与接触事件中对应的触控坐标的偏移量,令触控位移量为δfinger,则δfinger=p-p0。

步骤s308,根据当前的内容物顶部坐标判断内容物在当前状态下是否拉扯边缘,若是,则执行步骤s310,若否,则执行步骤s318。

具体的,内容物拉扯边缘包括内容物拉扯上边缘及内容物拉扯下边缘。如图4(a)所示,图4(a)为一个实施例中内容物拉扯上边缘的示意图,内容物顶部坐标x大于0,即表示内容物拉扯上边缘。如图4(b)所示,图4(b)为一个实施例中内容物拉扯下边缘的示意图,当内容物底部坐标x*小于h1,即表示内容物拉扯下边缘,即当x+h2小于h1时,内容物拉扯下边缘。如图2所示,当内容物顶部坐标x小于或等于0且内容物底部坐标x*大于或等于h1,即表示内容物不拉扯边缘。判断内容物是否拉扯边缘的函数可如下所示:

令x=x0,代入上述函数计算,当s(x)>0时,则内容物拉扯上边缘,当s(x)=0时,则内容物不拉扯边缘,当s(x)<0时,则内容物拉扯下边缘。

步骤s310,根据当前的内容物顶部坐标计算假定拉扯距离。

具体的,可预先设定计算边缘的拉伸距离的函数如下所示:

其中,δ代表接触物的拉扯距离,拉扯距离即表示从开始拉扯边缘后接触物移动的距离,例如,从开始拉扯上边缘接触物向下移动的距离,h1为滚动控件中的背景区域的长度,边缘的拉伸距离即为接触物拉扯后内容物与边缘之间的距离。若存在内容物拉扯边缘的情况,则可利用上述计算边缘的拉伸距离的函数计算得到当前内容物距离边缘的距离。当内容物在当前状态下拉扯边缘时,可先根据当前的内容物顶部坐标计算接触物的假定拉扯距离。在当前的移动事件中,内容物处于拉扯边缘状态,可假设该拉扯边缘状态是由于接触物从上往下或从下往上拉伸导致的,则需要得到其拉伸到当前程度的拉扯距离,即接触物的假定拉扯距离,假定拉扯距离表示在当前移动事件中,接触物假设已拉扯的距离。假定拉扯距离为计算拉伸距离的函数的反函数,公示如下所示:

若内容物拉扯上边缘,则假定拉扯距离为若内容物拉扯下边缘,则假定拉扯距离为

步骤s312,根据假定拉扯距离及触控位移量判断内容物在假定状态下是否拉扯边缘,若是,则执行步骤s314,若否,则执行步骤s316。

具体的,假定状态指的是假定内容物根据计算得到的新的内容物顶部坐标进行滚动后的状态。根据假定拉扯距离及触控位移量判断内容物在假定状态下是否拉扯边缘,若是,即表示内容物根据当前的移动事件计算得到新的内容物顶部坐标进行滚动后依然处于拉扯边缘的状态,若否,即表示内容物根据当前的移动事件计算得到新的内容物顶部坐标进行滚动后不拉扯边缘。

若当前内容物拉扯上边缘,则当假定拉扯距离与触控位移量之和大于或等于0时,即时,则表示新的内容物顶部坐标使得内容物依然处于拉扯上边缘状态;同理,若当前内容物拉扯下边缘,则当时,则表示新的内容物顶部坐标使得内容物依然处于拉扯下边缘状态。

步骤s314,根据假定拉扯距离与触控位移量计算拉伸距离,并根据拉伸距离计算新的内容物顶部坐标。

具体的,当内容物拉扯上边缘时,且新的内容物顶部坐标使得内容物依然处于拉扯上边缘状态,即当s(x0)>0,且时,可先计算拉伸距离并令x1表示新的内容物顶部坐标,则

当内容物拉扯下边缘时,且新的内容物顶部坐标使得内容物依然处于拉扯下边缘状态,即当s(x0)<0,且时,可先计算拉伸距离并令x1表示新的内容物顶部坐标,则:

步骤s316,根据假定拉扯距离与触控位移量计算新的内容物顶部坐标。

具体的,若根据假定拉扯距离及触控位移量判断出内容物不拉扯边缘,则新的内容物坐标即可根据假定拉扯距离与触控位移量抵消后的值进行计算。当内容物拉扯上边缘时,若新的内容物顶部坐标使得内容物不再处于拉扯上边缘状态,即当s(x0)>0,且则新的内容物顶部坐标

当内容物拉扯下边缘时,若新的内容物顶部坐标使得内容物不再处于拉扯下边缘状态,即当s(x0)<0,且则新的内容物顶部坐标

步骤s318,根据当前的内容物顶部坐标与触控位移量之和判断内容物在假定状态下是否拉扯边缘,若是,则执行步骤s320,若否,则执行步骤s322。

具体的,若当前的内容物不拉扯边缘,即s(x0)=0,则根据当前的内容物顶部坐标与触控位移量之和判断内容物在假定状态下是否拉扯边缘,若是,则表示内容物根据当前的移动事件计算得到新的内容物顶部坐标进行滚动后将处于拉扯边缘的状态,若否,则表示内容物根据当前的移动事件计算得到新的内容物顶部坐标进行滚动后依然不拉扯边缘。若s(x0+δfinger)>0或s(x0+δfinger)<0,则新的内容物顶部坐标使内容物处于拉扯边缘状态,若s(x0+δfinger)=0,则新的内容物顶部坐标使内容物不拉扯边缘。

步骤s320,根据当前的内容物顶部坐标与触控位移量计算拉伸距离,并根据拉伸距离计算新的内容物顶部坐标。

具体的,若新的内容物顶部坐标使内容物拉扯上边缘,即当s(x0)=0且s(x0+δfinger)>0,可先计算拉伸距离fstretch(x0+p-p0),则新的内容物顶部坐标x1=fstretch(x0+p-p0)。若新的内容物顶部坐标使内容物拉扯下边缘,即当s(x0)=0且s(x0+δfinger)<0,则可先计算拉伸距离fstretch(h1-(x0+p-p0)-h2),则新的内容物顶部坐标x1=h1-fstretch(h1-(x0+p-p0)-h2)-h2。

步骤s322,根据当前的内容物顶部坐标与触控位移量计算新的内容物顶部坐标。

具体的,若新的内容物顶部坐标使内容物不拉扯边缘,即当s(x0)=0且s(x0+δfinger)=0,则新的内容物顶部坐标x1=x0+p-p0。

在移动事件中,新的内容物顶部坐标x1的各种不同情况的计算方式可如表1具体所示:

表1

步骤s130,接收抬起事件,并根据最后一次移动事件中计算得到的内容物顶部坐标判断是否执行惯性滚动,若是,则执行步骤s140,若否,则执行步骤s150。

具体的,抬起事件为接触物离开屏幕所产生的事件,当接收到抬起事件时,可根据最后一次移动事件中计算得到的内容物顶部坐标判断是否执行惯性滚动,令xend为最后一次移动事件中计算得到的内容物顶部坐标,若内容物不拉扯边缘,即当s(xend)=0,则执行惯性滚动,若内容物拉扯边缘,即当s(xend)>0或s(xend)<0,则不执行惯性滚动。

步骤s140,确定触控离开速度,根据触控离开速度计算惯性滚动位移量,并根据最后一次移动事件中计算得到的内容物顶部坐标及惯性滚动位移量计算并更新惯性滚动过程中的内容物顶部坐标,以使内容物随着内容物顶部坐标滚动。

具体的,当接触物离开屏幕时,内容物会随着接触物的离开方向及触控离开速度继续滚动一段时间再停下来,这个过程即为惯性滚动。

如图5所示,在一个实施例中,步骤s140确定触控离开速度,根据触控离开速度计算惯性滚动位移量,并根据最后一次移动事件中计算得到的内容物顶部坐标及惯性滚动位移量计算并更新惯性滚动过程中的内容物顶部坐标,以使内容物随着内容物顶部坐标滚动,具体包括以下步骤:

步骤s502,分别获取最后一次移动事件的触控坐标及前一次移动事件的触控坐标。

具体的,可获取最后一次移动事件的触控坐标pend及前一次移动事件的触控坐标pprev,其中,pprev可为与最后一次移动事件相连的前一次移动事件中的触控坐标,也可为前几次移动事件中的触控坐标,pend需是与pprev有明显区别的两个点。

步骤s504,获取最后一次移动事件的移动时刻与前一次移动事件的移动时刻的时间间隔。

具体的,获取了pend与pprev之后,需进一步获取与该两个触控坐标对应的移动时刻tend(毫秒)及tprev,并计算二者的时间间隔tδ=tend-tprev,在实际运算中,为确保pend与pprev是明显区别的两个点,可令tδ>16(毫秒),即取时间间隔大于16毫秒以上的两个触控坐标,但不限于此。

步骤s506,根据最后一次移动事件的触控坐标,前一次移动事件的触控坐标及时间间隔计算触控离开速度。

具体的,触控离开速度vend的计算公式为:

当计算得到触控离开速度后,在惯性滚动过程中,可实时获取惯性滚动时间,根据惯性滚动时间实时计算惯性滚动位移量,并根据最后一次移动事件中计算得到的内容物顶部坐标及惯性滚动位移量计算并更新惯性滚动过程中的内容物顶部坐标。

步骤s508,获取惯性滚动第一阶段滚动时间。

具体的,在惯性滚动过程中,内容物在一段时间内按照函数fis(t)的返回值进行运动,即t时刻,惯性滚动过程中的内容物顶部坐标x2=fis(t)。惯性滚动可分为两个阶段,第一阶段内容物不拉扯边缘,当内容物到达边缘则进入第二阶段。惯性滚动第一阶段滚动时间即为在第一阶段中的当前时刻t。

步骤s510,根据触控离开速度及第一阶段滚动时间计算第一阶段惯性滚动位移量。

具体的,在惯性滚动的第一阶段,内容物不拉扯边缘,此时fis(t)≤0或fis(t)+h2≥h1,计算第一阶段惯性滚动位移量sis(t),公式可如下所示:

步骤s512,根据最后一次移动事件中计算得到的内容物顶部坐标及第一阶段惯性滚动位移量计算惯性滚动过程中的内容物顶部坐标。

具体的,fis(t)=xend+sis(t),则惯性滚动过程中的内容物顶部坐标x2=fis(t)=xend+sis(t)。

步骤s514,在预设时间内,判断内容物是否到达边缘,若是,则执行步骤s516,若否,则执行步骤s508。

具体的,在本实施例中,预设时间可优选为1900毫秒,在惯性滚动的第一阶段中,0≤t≤1900(毫秒),若内容物在1900毫秒内先到达边缘,则进入第二阶段。若超过预设时间则停止滚动,即若在1900毫秒内还未到达边缘,则停止滚动。

步骤s516,进入惯性滚动第二阶段。

步骤s518,根据最后一次移动事件中计算得到的内容物顶部坐标及触控离开速度计算惯性滚动第一阶段与惯性滚动第二阶段的预定总时间。

具体的,令惯性滚动第二阶段开始时内容物到达边缘的距离为d,则有:

令惯性滚动第一阶段从内容物开始滚动到内容物到达边缘所需的时间为t1,令v0=|vend|,则

在惯性滚动第二阶段,令惯性滚动第一阶段与惯性滚动第二阶段的预定总时间为t,则

步骤s520,获取惯性滚动第二阶段滚动时间。

具体的,惯性滚动第二阶段滚动时间即为第二阶段中的当前时刻t。

步骤s522,根据触控离开速度及第二阶段滚动时间计算第二阶段惯性滚动位移量。

具体的,在惯性滚动第二阶段,在第二阶段中的当前时刻为t(t-t1>0),令第二阶段惯性滚动位移量为svs(t),则

步骤s524,根据最后一次移动事件中计算得到的内容物顶部坐标及第二阶段惯性滚动位移量计算惯性滚动过程中的内容物顶部坐标。

具体的,在惯性滚动的第二阶段,fis(t)=xend+sgn(vend)svs(t),则惯性滚动过程中的内容物顶部坐标x2=fis(t)=xend+sgn(vend)svs(t),其中,sgn为符号函数,其定义如下:

步骤s526,判断第一阶段滚动时间及第二阶段滚动时间之和是否大于预定总时间,若是,则执行步骤s528,若否,则执行步骤s520。

具体的,在惯性滚动的第二阶段,需满足0≤t≤t,针对不同的情况,t的计算形式也不同,当第二阶段中的当前时刻大于t时,则停止执行惯性滚动,若停止惯性滚动时,内容物处于拉扯边缘状态,即会进入回滚,若停止惯性滚动时,内容物不拉扯边缘,则滚动过程结束。

步骤s528,停止执行惯性滚动。

本实施例中,根据接触物的触控离开速度来计算内容物顶部坐标,接触物的触控离开速度即为运动轨迹的最终速度,使内容物滚动的方向与接触物离开方向保持一致,不会出现滚动方向与手指运动方向相反的情况。此外,惯性滚动过程中的加速度可以不断进行变化,不再保持固定值,能使滚动更加流畅。

步骤s150,根据最后一次移动事件中计算得到的内容物顶部坐标判断是否执行回滚,若是,则执行步骤s160,若否,则执行步骤s170。

具体的,当最后一次移动事件中计算得到的内容物顶部坐标xend≠0,则执行回滚,即若当前的内容物拉扯边缘,则执行回滚。

步骤s160,获取回滚时刻,并根据最后一次移动事件中计算得到的内容物顶部坐标及回滚时刻计算并更新回滚过程中的内容物顶部坐标,以使内容物随着内容物顶部坐标滚动。

如图6所示,在一个实施例中,步骤s160获取回滚时刻,并根据最后一次移动事件中计算得到的内容物顶部坐标及回滚时刻计算并更新回滚过程中的内容物顶部坐标,以使内容物随着内容物顶部坐标滚动,具体包括以下步骤:

步骤s602,获取回滚时刻,根据回滚时刻计算辅助值。

具体的,回滚时刻为回滚过程中的当前时刻,在回滚过程中,内容物在一段时间内按照函数fr(t)的返回值进行运动,即在回滚过程中,t'时刻,回滚过程中的内容物顶部坐标x3=fr(t')。可定义计算fr(t)的辅助函数re(t),内容物按照re(t)所描述的方式,移动到边缘。re(t)的公式如下所示:

re(t)=0.054989-1.441760×10-9t+0.000035t2-2.418702×10-7t3

+9.064675×10-10t4-1.539225×10-12t5+1.017036×10-15t6

获取回滚时刻t',并计算t'时刻的辅助值re(t')。

步骤s604,根据辅助值及最后一次移动事件中计算得到的内容物顶部坐标计算拉伸距离。

具体的,定义计算回滚过程中的拉伸距离的函数如下所示:

其中,分别对应内容物拉扯上边缘及拉扯下边缘两种不同的情况。

步骤s606,根据拉伸距离计算回滚过程中的内容物顶部坐标。

具体的,若s(xend)>0,则内容物拉扯上边缘,内容物需向上回滚,则fr(t)=xend-freturn(t),在回滚时刻t'时,此时回滚过程中的内容物顶部坐标x3=xend-freturn(t')。若s(xend)<0,则内容物拉扯下边缘,内容物需向下回滚,则fr(t)=xend+freturn(t),在回滚时刻t'时,此时回滚过程中的内容物顶部坐标x3=xend+freturn(t')。

步骤s608,判断内容物是否到达边缘,若是,则执行步骤s610,若否,则执行步骤s602。

具体的,若s(xend)>0,则当fr(t)=0时,即表示内容物到达上边缘,停止执行回滚。若s(xend)<0,则当fr(t)=h1-h2时,即表示内容物到达下边缘,停止执行回滚。

步骤s610,停止执行回滚。

在本实施例中,能够根据滚动控件的形状及大小计算回滚过程中的拉伸距离,使得回滚过程中可以进行变速滚动,滚动过程更加流畅。

在一个实施例中,在步骤s140确定触控离开速度,根据触控离开速度计算惯性滚动位移量,并根据最后一次移动事件中计算得到的内容物顶部坐标及惯性滚动位移量计算并更新惯性滚动过程中的内容物顶部坐标,以使内容物随着内容物顶部坐标滚动之后,还包括步骤:根据惯性滚动过程中计算得到的最新的内容物顶部坐标判断是否需要执行回滚。

具体的,当内容物执行完惯性滚动后,若依然处于拉扯边缘的状态,则需执行回滚。令xend'为惯性滚动过程中计算得到的最新的内容物顶部坐标,若s(xend')≠0,则进入回滚,后续回滚过程中的内容物顶部坐标的计算方式同步骤s602至步骤s610描述的一致,只需将最后一次移动事件中计算得到的内容物顶部坐标xend替换为xend'即可,在此不再一一赘述。惯性滚动-拉扯边缘-回滚的过程曲线平滑,使滚动更加流畅。

步骤s170,停止滚动。

上述基于滚动控件实现内容物滚动的方法,根据不同的事件以不同的方式计算内容物顶部坐标,使得在移动事件中的滚动、惯性滚动及回滚过程中,滚动控件中的内容物随着内容物顶部坐标的变化不断进行滚动;并且,在惯性滚动中,根据触控离开速度计算惯性滚动位移量,并计算惯性滚动过程中的内容物顶部坐标,能够根据接触物运动轨迹进行计算,使内容物滚动的方向与接触物离开方向保持一致,不会出现滚动方向与手指运动方向相反的情况,使滚动更流畅。

进一步地,上述基于滚动控件实现内容物滚动的方法在移动事件中的滚动、惯性滚动及回滚过程中,内容物随着接触物的移动滚动-惯性滚动-回滚的曲线平滑,滚动流畅,有利于提高用户体验。

此外,该方法中计算量小,在实际运用中,即使将滚动计算逻辑和渲染线程放在同一个线程中,滚动的运算量可忽略不计,不会导致卡顿的现象,滚动效果流畅。

如图7所示,一种基于滚动控件实现内容物滚动的装置,包括接触模块710、移动模块720、抬起模块730、惯性滚动模块740和回滚模块750。

接触模块710,用于接收接触事件,停止滚动滚动控件中的内容物并记录当前的内容物顶部坐标。

移动模块720,用于接收移动事件,获取移动事件中对应的触控坐标,并根据触控坐标计算并更新内容物顶部坐标,以使内容物随着内容物顶部坐标滚动。

抬起模块730,用于接收抬起事件,并根据最后一次移动事件中计算得到的内容物顶部坐标判断是否执行惯性滚动。

惯性滚动模块740,用于若执行惯性滚动,则确定触控离开速度,根据触控离开速度计算惯性滚动位移量,并根据最后一次移动事件中计算得到的内容物顶部坐标及惯性滚动位移量计算并更新惯性滚动过程中的内容物顶部坐标,以使内容物随着内容物顶部坐标滚动。

回滚模块750,用于根据最后一次移动事件中计算得到的内容物顶部坐标判断是否执行回滚,若执行回滚,则获取回滚时刻,并根据最后一次移动事件中计算得到的内容物顶部坐标及回滚时刻计算并更新回滚过程中的内容物顶部坐标,以使内容物随着内容物顶部坐标滚动。

上述基于滚动控件实现内容物滚动的装置,根据不同的事件以不同的方式计算内容物顶部坐标,使得在移动事件中的滚动、惯性滚动及回滚过程中,滚动控件中的内容物随着内容物顶部坐标的变化不断进行滚动;并且,在惯性滚动中,根据触控离开速度计算惯性滚动位移量,并计算惯性滚动过程中的内容物顶部坐标,能够根据接触物运动轨迹进行计算,使内容物滚动的方向与接触物离开方向保持一致,不会出现滚动方向与手指运动方向相反的情况,且内容物随着接触物的移动滚动-惯性滚动-回滚的曲线平滑,滚动更加流畅。

如图8所示,在一个实施例中,上述基于滚动控件实现内容物滚动的装置,除了包括接触模块710、移动模块720、抬起模块730、惯性滚动模块740和回滚模块750以外,还包括建立模块760。

建立模块760,用于预先建立滚动控件,滚动控件包括背景区域及内容物区域,内容物区域叠加在背景区域上,内容物区域的长度大于背景区域的长度。

上述基于滚动控件实现内容物滚动的装置,通过建立双层结构的滚动控件,且使内容物区域的长度大于背影区域的长度,方便后续内容物滚动过程中计算内容物顶部坐标,使得滚动过程更加流畅,且计算方式简单,计算量小。

如图9所示,移动模块720包括获取单元721、接收单元723、确定单元725、判断单元727和处理单元729。

获取单元721,用于获取当前的内容物顶部坐标与接触事件中对应的触控坐标。

接收单元723,用于接收移动事件,并获取移动时刻的新的触控坐标。

确定单元725,用于根据新的触控坐标及接触事件中对应的触控坐标确定触控位移量。

判断单元727,用于根据当前的内容物顶部坐标判断内容物在当前状态下是否拉扯边缘。

处理单元729,用于若内容物在当前状态下拉扯边缘,则根据当前的内容物顶部坐标计算假定拉扯距离,并根据假定拉扯距离及触控位移量判断内容物在假定状态下是否拉扯边缘,若是,则根据假定拉扯距离与触控位移量计算拉伸距离,并根据拉伸距离计算新的内容物顶部坐标,若否,则根据假定拉扯距离与触控位移量计算新的内容物顶部坐标。

处理单元729还用于若内容物在当前状态下不拉扯边缘,则根据当前的内容物顶部坐标与触控位移量之和判断内容物在假定状态下是否拉扯边缘,若是,则根据当前的内容物顶部坐标与触控位移量计算拉伸距离,并根据拉伸距离计算新的内容物顶部坐标,若否,则根据当前的内容物顶部坐标与触控位移量计算新的内容物顶部坐标。

上述基于滚动控件实现内容物滚动的装置,根据移动事件中对应的触控坐标计算触控位移量,并根据内容物在不同状态下是否拉扯边缘分不同情况计算新的内容物顶部坐标,使得滚动过程中内容物的滚动更加流畅,使用户在滑动时拥有更好的手感。

如图10所示,惯性滚动模块740包括获取单元410、速度计算单元420和处理单元430。

获取单元410,用于分别获取最后一次移动事件的触控坐标及前一次移动事件的触控坐标。

获取单元410还用于获取最后一次移动事件的移动时刻与前一次移动事件的移动时刻的时间间隔。

速度计算单元420,用于根据最后一次移动事件的触控坐标、前一次移动事件的触控坐标及时间间隔计算触控离开速度。

处理单元430,用于获取惯性滚动时间,根据惯性滚动时间计算惯性滚动位移量,并根据最后一次移动事件中计算得到的内容物顶部坐标及惯性滚动位移量计算并更新惯性滚动过程中的内容物顶部坐标。

如图11所示,在一个实施例中,处理单元430包括时间获取子单元302、第一位移量计算子单元304、第一坐标计算子单元306、判断子单元308、总时间计算子单元310、第二位移量计算子单元312、第二坐标计算子单元314及停止子单元316。

时间获取子单元302还用于获取惯性滚动第一阶段滚动时间。

第一位移量计算子单元304,用于根据触控离开速度及第一阶段滚动时间计算第一阶段惯性滚动位移量。

第一坐标计算子单元306,用于根据最后一次移动事件中计算得到的内容物顶部坐标及第一阶段惯性滚动位移量计算惯性滚动过程中的内容物顶部坐标。

判断子单元308,用于在预设时间内,判断内容物是否到达边缘,若到达边缘,则进入惯性滚动第二阶段。

总时间计算子单元310,用于根据最后一次移动事件中计算得到的内容物顶部坐标及触控离开速度计算惯性滚动第一阶段与惯性滚动第二阶段的预定总时间。

时间获取子单元302还用于获取惯性滚动第二阶段滚动时间。

第二位移量计算子单元312,用于根据触控离开速度及第二阶段滚动时间计算第二阶段惯性滚动位移量。

第二坐标计算子单元314,用于根据最后一次移动事件中计算得到的内容物顶部坐标及第二阶段惯性滚动位移量计算惯性滚动过程中的内容物顶部坐标。

停止子单元316,用于当第一阶段滚动时间及第二阶段滚动时间之和大于预定总时间,则停止执行惯性滚动。

上述基于滚动控件实现内容物滚动的装置,在惯性滚动过程中,根据接触物的触控离开速度来计算内容物顶部坐标,接触物的触控离开速度即为运动轨迹的最终速度,使内容物滚动的方向与接触物离开方向保持一致,不会出现滚动方向与手指运动方向相反的情况。此外,惯性滚动过程中的加速度可以不断进行变化,不再保持固定值,能使滚动更加流畅。

如图12所示,回滚模块750包括辅助值计算单元752、距离计算单元754、坐标计算单元756和回滚停止单元758。

辅助值计算单元752,用于获取回滚时刻,根据回滚时刻计算辅助值。

距离计算单元754,用于根据辅助值及最后一次移动事件中计算得到的内容物顶部坐标计算拉伸距离。

坐标计算单元756,用于根据拉伸距离计算回滚过程中的内容物顶部坐标。

回滚停止单元758,用于当内容物到达边缘时,则停止执行回滚。

在一个实施例中,回滚模块750还用于根据惯性滚动过程中计算得到的最新的内容物顶部坐标判断是否需要执行回滚。

上述基于滚动控件实现内容物滚动的装置,能够根据滚动控件的形状及大小计算回滚过程中的拉伸距离,使得回滚过程中可以进行变速滚动,滚动流畅。且在惯性滚动-拉扯边缘-回滚的过程中曲线平滑,使滚动更加流畅。此外,滚动过程中的计算量小,在实际运用中,即使将滚动计算逻辑和渲染线程放在同一个线程中,也不会导致卡顿的现象,滚动效果流畅。

以上所述实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。

以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1