一种根据用户喜好动态排列资讯模块的方法

文档序号:9524203阅读:252来源:国知局
一种根据用户喜好动态排列资讯模块的方法
【技术领域】
[0001]本发明涉及智能手机DIY界面的技术领域,特别地涉及一种互联网应用软件界面排版的技术方法。
【背景技术】
[0002]随着智能手机的普及,众多手机资讯类软件进入了用户的视线,资讯类软件多以频道分类或者源分类的方式为用户提供阅读。当中的弊端是资讯频道分类成千上万,但是用户喜欢的频道可能只有少数的部分,这时候我们需要提供大量的频道分类给用户的同时,需要让用户把自己最常看和最喜欢的频道放在应用软件最方便点击的地方,用户的喜好是随时改变的,可能今天喜欢这些频道,明天会喜欢另外的一些频道,这时候我们需要提供给用户DIY自己喜欢频道位置的功能。
频道分类DIY界面算法,解决了智能手机资讯软件频道分类位置死板,无法自定义位置的问题,在设计方法上属于独创。针对用户常用的频道分类,我们以方块的形式呈现在用户进入app的第一个界面,方块上面会展示此分类下资讯相关的图文,最重要的,我们给用户提供DIY这些模块位置的功能,根据用户的喜好的变化,用户可以根据自己实时的喜好,把最常用的资讯分类模块放置到自己最喜欢的位置,方便下次快速的进入这些频道查看资讯。如使用安卓系统自带的控件,无法达到这种根据用户喜好任意DIY位置的功能。
目前实现用户DIY资讯方块的一种方法是:把手机屏幕分成X列,Y行的方格,每个单位方格的宽高为单位1,初始所有方块的位置以左上角位置的X,Y位置确定,而它所占的宽和高,根据是多少个单位方格来确定。如此我们就可以确定这个资讯方块在X列Y行的屏幕上所占据的区域。如此下来可以确定当前所有资讯模块所占据的区域,以此为根据我们可以动态的来排列这些模块的位置,而不让他们出现重叠的情况,从而达到根据用户喜欢来排列模块的功能。

【发明内容】

[0003]本发明的主要目的是提供一种根据用户喜好来动态排列资讯模块位置的解决方法。以解决现有的安卓控件中无法做到的排版效果。使用安卓系统自带的控件都无法根据用户手势的拖动来达到用户想要更换位置的效果,影响用户阅读体验。
为解决上述问题本发明提供如下技术方案:
1、把资讯按频道分类,每个分类渲染成若干m乘η的矩形模块,每个模块上展示此分类频道下的一些基本信息,这些模块都接收到用户的长按手势时,就会进入激活状态,此时这个模块可以跟随用户手指在屏幕上得滑动来做线性移动,并且在用户松开时确定最终位置和其余资讯模块的排版位置。
2、把屏幕分成X列,Υ行的单位格子,每次添加资讯频道分类时,都会生成一个m个单位宽η个单位高的矩形模块,此模块的左上角的坐标位置确定了它的起始位置,然后横向占据单位m个格子纵向占据η个单位格子,如此我们就确定了它在屏幕上所占的区域,用户每次添加资讯或者其他功能模块时,以此确定添加模块的渲染区域。
3、每次我们松开手指时,被操作的模块(被操作模块及用户想要移动的模块后面统称M)都会移动到一个新的位置,这时我们会查看Μ的左上角与哪个单元格的绝对距离最接近,已确定Μ的起始位置,然后执行上述第二步中的操作确定渲染区域,确定渲染区域时需要做碰撞检测,针对碰撞检测结果会有针对其他模块的不同操作,最后把Μ成功放置之后,保证Μ与其它模块没有重叠。
【具体实施方式】
:
[0004]1.首先我们把整个屏幕的可编辑区域的宽和高分别为w像素和h像素,分成X列,Y行的若干宽高都为width=w/x像素(PX)的正方形单元格,然后我们设置一个二维数组aXX来存放所有的单元格对应的状态(状态为两个,0表示此单元格未被占用,1表示被占用)。如此,aXX即可表示整个可编辑区域的状态图。
2.根据上述准备,我们第一步开始初始化默认的模块,我们人为的把默认模块无重叠的排好,并记录每一个模块的信息,需要记录模块的信息主要包括宽Wn,高Hn以及左上角与哪个单元格重叠a[m] [η],然后根据每个模块的这三个信息,把整个a[m] [η]的值重新全部变成0,然后遍历所有模块,把每个模块所占区域映射到a[m] [η]上,即可以生成整个区域单元格aXX被占用的情况,即空的单元格为0,被占用的单元格为1。
3.有了上述初始化工作后,接下来可以允许用户对整个界面进行DIY排版操作,当用户手指长按屏幕产生onLongclick事件时,这时候我们根据当前触摸的像素点j,k,然后分别用j和k整除单元格的宽高width,即可得出此触摸点属于哪个单元格,然后通过遍历所有默认单元格即可得出触摸点属于哪个模块。此时我们把此模块的视图view单独渲染,当手指移动时,根据最新移动到位置j,k来重新渲染此view的显示区域,这个移动过程不做任何碰撞判断。
4.当手指移动到某个像素位置j,k此时手指离开屏幕时,此时我们用j和k整除单元格的宽width得出当前像素位置所在的单元格X,1,首先我们判断此单元格在a[x] [y]中是否为0,如果不为0即表示此单元格已经被占用不可放置,此时需要把此单元格水平位置(包含此单元格)以下的所有模块向下移动被操作模块Μ的高度Hn (单位为单元格)的距离,此时被操作模块即可放置在左上角为a[x][y]单元格的位置,并且必定有足够的区域放置Μ。这时候需要注意一个问题,如果Μ左或右边超出屏幕,需要右或左移位。其次,我们来看第二种情况,即a[x] [y]为0的情况,如果a[x] [y]为0,此时我们从a[x] [y]到a[x+Wn] [y+Hn],这条对角线建立的矩形,看看此矩形是否都为0,如果成立则直接放置,如果有一个不为0,我们则搜索a[x] [y]到a[x+Wn] [y-Hn],同样的,如果不成立,继续搜索a[x] [y]到a[x_Wn] [y+Hn]和a[x] [y]到a[x-Wn] [y-Hn],最后如果四种情况都不成立,即已a[x] [y]为基准的上向左右方向都放不下当前被操作模块M,此时我们重复第一个步骤中的所有模块下移Hn个单元格高度的操作,再重新放置M。特殊情况,当a[x][y]不在我们定义的二维数组内时,即移动时模块超出边界,我们即认为此为非法操作,松开手指后,被操作模块Μ恢复到原始状态。
到这里为止,我们已处理了移动模块,并松开手指后,被操作模块Μ的放置位置的更新,此时被操作模块的左上角位置为a[x][y]。其他模块有可能被重新调整了位置。如此,我们需要重新生成aXX,即遍历aXX,并映射所有模块重新排版后的占用情况到aXX中。
【主权项】
1.一种排版的方法,应用需要使用metro风格展示信息的任何终端,其特征在于,所述方法包括: 对任意终端的数字显示屏进行区域划分,分成X列,y行的宽高固定的正方形小单元格,要展示的信息根据信息量的大小以及用户的需求来确定此metro占多少单元格, 若用户需要根据自身喜好来重新编排每个metro的大小和摆放位置,则我们会根据用户的长按,拖动,以及最终释放手指触摸动作的位置来展示搜索算法, 放置此metro在用户最希望摆放的位置,同时保证其他模块没有任何重叠,每个metro的大小可以自由调节,每个metro可以删除,也可以重新添加。2.根据权利要求1所述的方法,其特征还包括: 用户长按拖动模块最后释放手指后,进行的搜索算法中,涉及到的搜索空白区域行为。3.根据权利要求1所述的方法,其特征还包括: 操作的metro移动到模块间隙或者其他模块所占区域时进行的移动其他模块的行为。4.根据权利要求2所述的方法,其特征在于: 判断当前移动到的像素点被哪个单元格包含,判断移动到的此单元格是否为空白单元格,搜索此空白单元格上下左右搜索四周是否可以放置被操作模块,条件为所有模块不能重叠。5.根据权利要求3所述的方法,其特征在于: 判断当前释放点像素是否属于空隙或者是否被某个模块包含,判断当前释放点属于这个被包含模块的位置,根据位置来确定其余模块需要移动的空间,根据其他模块移动的空间搜索被操作模块最佳放置位置且保证不与其他模块重叠。6.根据权利要求4所述的方法,其特征在于: 被操作模块的宽和高分别是多少个单元格,被操作模块左上角的单元格与哪个单元格重叠,是确定被操作模块放置区域的关键。7.跟进权利要求5所述的方法,其特征在于: 被操作模块左上角单元格,就等于手指释放位置单元格。
【专利摘要】本发明公开了一种根据用户喜好来动态排列资讯模块位置的解决方法,以解决现有的安卓控件中无法做到的排版效果,把手机屏幕分成X列,Y行的方格,每个单位方格的宽高为单位1,初始所有方块的位置以左上角位置的X,Y位置确定,资讯方块在X列Y行的屏幕上所占据的区域,来确定当前所有资讯模块所占据的区域,以此为根据再动态排列这些模块的位置,而不让他们出现重叠的情况,从而达到根据用户喜好来排列模块的功能。
【IPC分类】G06F17/30, G06F3/0488, H04M1/725
【公开号】CN105279167
【申请号】CN201410288022
【发明人】不公告发明人
【申请人】深圳市英威诺科技有限公司
【公开日】2016年1月27日
【申请日】2014年6月25日
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1