一种手持设备的横竖屏切换渐变控制方法转让专利

申请号 : CN201110370745.3

文献号 : CN102541441B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 曾元清

申请人 : 广东欧珀移动通信有限公司

摘要 :

本发明涉及一种手持设备的横竖屏切换渐变控制方法,包括:按设定次数依序计算并逐次显示透明度A I从=0到1的上层全黑图像和下层不断模糊的切换方向前的界面图像;冻结屏幕,获取到切换方向后的界面图像;按指定次数进行计算、存储并逆序逐次显示透明度AI从=1到0的上层全黑图像和存储的下层不断清晰的切换方向后的界面图像;显示切换方向后的界面图像,解冻屏幕;所述计算处理包括混合周边四个或八个像素点的像素值和亮度求平均值。这种控制方法,能完美衔接用户旋转动作,给用户逼真的自然体验。

权利要求 :

1.一种手持设备的横竖屏切换渐变控制方法,其特征在于,包括以下步骤:

1.2)在手持设备屏幕按设定次数依序计算并逐次显示二层叠加图像:上层图像是带透明度A I的全黑图、下层图像是带清晰度的切换方向前的界面图像;所述计算包括按设定次数逐次增加所述透明度AI,从开始的全透明A I=0到最后的不透明A I=1;所述计算还包括混合处理:重新设置本次显示对应下层图像每一像素点的像素值和亮度使它们分别等于上次显示对应下层图像该像素点周边四个或八个像素点的像素值和亮度的平均值;

1.3)冻结屏幕,获取到切换方向后的界面图像;

1.4)将所述切换方向后的界面图像替换所述切换方向前的界面图像,按指定次数依序进行所述计算并存储,再逆序逐次进行显示直至到达所述指定次数;

1.5)显示切换方向后的界面图像,解冻屏幕。

2.根据权利要求1所述控制方法,其特征在于,还包括步骤1.1):接收到横竖屏切换消息判断是否是重力感应方式,是则进入步骤1.2)。

3.根据权利要求2所述控制方法,其特征在于,所述步骤1.1)还包括判断不是重力感应方式,则显示切换方向后的界面图像,跳过步骤1.2)~1.5)直接结束。

4.根据权利要求1所述控制方法,其特征在于,每次显示间隔时间是10-20豪毫秒。

5.根据权利要求1所述控制方法,其特征在于,所述设定次数和 指定次数是20-40次。

6.根据权利要求1所述控制方法,其特征在于,所述周边四个分别是上、下、左、右四个方向最接近的像素点。

7.根据权利要求1所述控制方法,其特征在于,所述周边四个分别是四个斜对角方向最接近的像素点。

8.根据权利要求1所述控制方法,其特征在于,所述八个像素点是上、下、左、右和四个斜对角方向最接近的像素点。

9.根据权利要求1所述控制方法,其特征在于,所述像素值是RGB值。

10.根据权利要求1所述控制方法,其特征在于,所述步骤1.4)包括在所述二层叠加图像之下再叠加切换方向后的界面图像作为最底层图像;所述步骤1.5)包括隐藏所述二层叠加图像显示所述最底层图像。

说明书 :

一种手持设备的横竖屏切换渐变控制方法

技术领域

[0001] 本发明涉及计算机人机交互,具体涉及一种手持设备的横竖屏切换渐变控制方法,尤其是应用在使用智能手机上。

背景技术

[0002] 目前,现有移动终端的智能手机只有横竖屏切换功能并没有横竖屏切换中显示切换动画的功能。在屏幕方向改变情况下,有一个切换的动画效果,尤其是在重力感应的情况下有一个自然旋转动画配合用户旋转手机的动作,才不会让用户感觉到界面生硬的效果,能给用户无限美好体验。但是,目前的手机或其他手持设备在横竖屏切换时都没有一个完美的衔接动画,或者还没有这种技术被公开。

发明内容

[0003] 本发明需要解决的技术问题是,如何提供一种手持设备的横竖屏切换渐变控制方法,能配合用户旋转手持设备的动作在设备屏幕上给出一个完美、自然的衔接动画。
[0004] 本发明的技术问题这样解决:构建一种手持设备的横竖屏切换渐变控制方法,其特征在于,包括以下步骤:
[0005] 1.2)在手持设备屏幕按设定次数依序计算并逐次显示二层叠加图像:上层图像是带透明度A I的全黑图、下层图像是带清晰度的切换方向前的界面图像;所述计算包括按设定次数逐次增加所述透明度AI,从开始的全透明A I=0到最后的不透明A I=1;所述计算还包括混合处理:重新设置本次显示对应下层图像每一像素点的像素值和亮度使它们分别等于上次显示对应下层图像该像素点周边四个或八个像素点的像素值和亮度的平均值;
[0006] 1.3)冻结屏幕,获取到切换方向后的界面图像;防止在切换过程中,被用户触摸或点击屏幕触发其他工作指令;
[0007] 1.4)将所述切换方向后的界面图像替换所述切换方向前的界面图像,按指定次数依序进行所述计算并存储,再逆序逐次进行显示直至到达所述指定次数;
[0008] 1.5)显示切换方向后的界面图像,解冻屏幕;接受用户基于触摸屏的触摸或点击指令。
[0009] 按照本发明提供的控制方法,还包括步骤1.1):接收到横竖屏切换消息判断是否是重力感应方式,是则进入步骤1.2)。
[0010] 按照本发明提供的控制方法,所述步骤1.1)还包括判断不是重力感应方式,则显示切换方向后的界面图像,跳过步骤1.2)~1.5)直接结束。
[0011] 按照本发明提供的控制方法,每次显示间隔时间是10-20豪秒。
[0012] 按照本发明提供的控制方法,所述设定次数和指定次数是20-40次,设定次数和指定次数优选相同。
[0013] 按照本发明提供的控制方法,所述周边四个分别是上、下、左、右四个方向最接近的像素点。
[0014] 按照本发明提供的控制方法,所述周边四个分别是四个斜对角方向最接近的像素点。
[0015] 按照本发明提供的控制方法,所述八个像素点是上、下、左、右和四个斜对角方向最接近的像素点。
[0016] 按照本发明提供的控制方法,所述像素值包括但不限制于是RGB值。
[0017] 按照本发明提供的控制方法,所述步骤1.4)包括在所述二层叠加图像之下再叠加切换方向后的界面图像作为最底层图像;所述步骤1.5)包括隐藏所述二层叠加图像显示所述最底层图像。
[0018] 按照本发明提供的控制方法,本发明各次显示刷新采用双显存轮流调用方式,该双显存是逻辑内存,所述轮流调用是在双显存之间切换当前显存地址。
[0019] 本发明提供的手持设备的横竖屏切换渐变控制方法,能根据用户旋转手机的动作显示清晰到模糊、模糊再到清晰的界面,较现有技术具有以下优点:
[0020] 1、能完美衔接用户动作,给用户以自然的实体感应;
[0021] 2、冻结屏幕,屏蔽切换过程中的触摸屏指令;
[0022] 3、对像素矩阵进行逐次相同的像素值和亮度平均混合计算,计算简单、处理和显示流畅;
[0023] 4、双显存处理,使动画切换更流畅,动态连续显示效果更好。

附图说明

[0024] 下面结合附图和具体实施例进一步对本发明进行详细说明:
[0025] 图1是本发明横竖屏切换渐变控制流程示意图;
[0026] 图2是本发明模糊处理原理示意图;
[0027] 图3是本发明具体实施例的手机中横竖屏切换流程示意图;
[0028] 图4是本发明具体实施例的手机中安卓(Android)平台下Surface服务示意图;
[0029] 图5是创建Surface服务的流程示意图;
[0030] 图6是Surface显示处理流程示意图;
[0031] 图7是Surface显示缓冲示意图;
[0032] 图8是Surface显示原理示意图。

具体实施方式

[0033] 首先,说明本发明控制方法和原理:
[0034] (一)控制程序
[0035] 如图1所示,本发明的横竖屏切换渐变控制流程,具体包括以下步骤:
[0036] 101)根据重力感应判断屏幕方向是否变化?是,进入下一步,否则返回步骤101);
[0037] 102)根据原始界面图像播放从清晰到模糊的动画;
[0038] 103)冻结屏幕,界面布局、获取到切换方向后的界面图像;
[0039] 104)根据获取到的界面图像播放从模糊到清晰的动画,解冻屏幕。
[0040] (二)动画原理
[0041] 2.1)亮度渐变原理
[0042] 就是在显示层对象layer的draw方法的时候绘制一个RGB=黑色(0,0,0)的图形,但是它有一个透明度AI,就是这个RGB A I=(0,0,0,A I)当A I变成1的时候,不透明是全黑最暗;变成0的时候是全透明的,最亮。
[0043] 从亮到暗即A I的值从0到1逐渐变大
[0044] 从暗到亮即A I的值从1到0逐渐变小。
[0045] 2.2)清晰度模糊原理
[0046] 如图2所示,图中像素矩阵里面的像素点5,它是由周边的像素点1,2,3,4的像素值混合而来的(也可以取其他四个周边的像素点或八个周边的像素点):
[0047] 5A II=(1A2+2A2+3A2+4A2)/4
[0048] 5R=(1R+2R+3R+4R)/4
[0049] 5G=(1G+2G+3G+4G)/4
[0050] 5B=(1B+2B+3B+4B)/4
[0051] 其中:A II是亮度,R是红色,G是绿色,B是蓝色,1-5是图2所示像素阵列中的各像素点。
[0052] 第二,结合本发明方法在手机中的应用进一步详细说明:
[0053] 如图3所示,本发明具体实施例的智能手机中横竖屏切换控制流程,具体包括以下步骤:
[0054] 301)操作系统接收到横竖屏切换消息;
[0055] 302)判断横竖屏切换消息是否是使用重力感应方式?是进入下一步,否则直接进入步骤307);
[0056] 303)通过Show方法显示出控制亮度的上层图像和控制模糊度的下层图像;上层是不断降低透明度A I(0→1)的全黑图像,下层是不断增加混合处理次数的原始界面图像;
[0057] 304)判断是否到达设定次数?是进入下一步,否则返回步骤303);
[0058] 305)操作系统冻结屏幕和窗口;
[0059] 306)界面布局,获取到切换方向后的界面图像并作为最底层图像;调用播放旋转动画子程序;
[0060] 307)通过Show方法显示出控制亮度的上层图像和控制模糊度的下层图像;上层是不断增加透明度A I(1→0)的全黑图像,下层是事先存储的不断减少混合处理次数的切换方向后的界面图像;
[0061] 308)判断是否到达指定次数?是进入下一步,否则返回步骤307);
[0062] 309)隐藏控制亮度的上层图像和控制模糊度的下层图像,显示被覆盖的最底层图像;
[0063] 310)操作系统发送解冻屏幕消息,解冻屏幕。
[0064] 第三,结合本发明方法在手机中应用的具体实施例在Android平台下的实现再进一步详细说明:
[0065] 该实施例渐变分为两个步骤,一个是从清晰到模糊,另一个是从模糊到清晰,这些效果都是通过surface服务来实现的。
[0066] 从清晰到模糊是在冻结屏幕前调用了函数FirstRotate(),从模糊要清晰是在解冻后解锁触发过程RotateThread调用。
[0067] 如图4所示,RotateThread过程是一个无限循环处理surface变清晰的处理,它之前有把锁控制该surface的触发。在解冻后解锁让RotateThread中的锁解开后surface从模糊到清晰做变换,最后清晰后影藏该surface。
[0068] 实现控制surface渐变处理具体包括:
[0069] (一)创建surface对象
[0070] Surface的创建需要调用surfaceflinger对象里面的方法来创建,如图5所示,创建Surface的过程基本上分为两步:
[0071] a)建立SurfaceSession对象
[0072] 第一步通常只执行一次,目的是创建一个SurfaceComposerClient的实例,JAVA层通过JNI调用本地代码,本地代码创建一个SurfaceComposerClient的实 例,SurfaceComposerClient通 过 ISurfaceComposer 接 口 调 用 SurfaceFlinger的createConnection,SurfaceFlinger 返 回 一 个 ISurfaceFlingerClient 接 口 给SurfaceComposerClient,在createConnection的过程中,SurfaceFlinger创建了用于管理缓冲区切换的SharedClient,最后,本地层把SurfaceComposerClient的实例返回给JAVA层,完成SurfaceSession的建立。
[0073] b)利用SurfaceSession对象创建Surface
[0074] JAVA层通过JNI 调用本地 代码Surface_Init(),本 地代码 首先取 得第 一 步 创 建 的 SurfaceComposerClient 实 例,通 过SurfaceComposerClient,调用 ISurfaceFlingerClient 接 口 的 createSurface 方 法,进 入 SurfaceFlinger,SurfaceFlinger根据参数,创建不同类型的Layer,然后调用Layer的setBuffers()方法,为 该Layer创建 了 两个 缓 冲区,然后 返 回该Layer 的ISurface接 口,SurfaceComposerClient使用这个ISurface接口创建一个SurfaceControl实例,并把这个SurfaceControl返回给JAVA层。
[0075] (二)Surface对象的显示过程处理
[0076] 如图6所示,开始在Surface画图前,Surface.java会先调用lockCanvas()来得到要进行画图操作的Canvas,lockCanvas会进一步调用本地层的Surface_lockCanvas,本地代码利用JAVA层传入的SurfaceControl对象,通过getSurface()取得本地层的Surface对象,接着调用该Surface对象的lock()方法,lock()返回了改Surface的信息,其中包括了可用缓冲区的首地址vaddr,该vaddr在Android的2D图形库Skia中,创建了一个bitmap,然后通过Skia库中Canvas的API:Canvas.setBitmapDevice(bitmap),把该bitmap绑定到Canvas中,最后把这个Canvas返回给JAVA层,这样JAVA层就可以在该Canvas上进行画图操作,而这些画图操作最终都会画在以vaddr为首地址的缓冲区中。
[0077] 在Surface对象的lock()方法中:
[0078] dequeueBuffer(&backBuffer)获取backBuffer
[0079] SharedBufferClient->dequeue()获得当前空闲缓冲区的编号
[0080] 通过缓冲区编号获得真正的GraphicBuffer:backBuffer
[0081] 如果还没有对Layer中的buffer进行映射(Mapper),getBufferLocked通过ISurface接口重新重新映射
[0082] 获取frontBuffer
[0083] 根据两个Buffer的更新区域,把frontBuffer的内容拷贝到backBuffer中,这样保证了两个Buffer中显示内容的同步
[0084] backBuffer->lock()获得backBuffer缓冲区的首地址vaddr
[0085] 通过info参数返回vaddr
[0086] (三)释放Surface对象对应的显示缓冲区
[0087] 如图7所示,画图完成后,要想把Surface的内容显示到屏幕上,需要把Canvas中绑定的缓冲区释放,并且把该缓冲区从变成可投递(因为默认只有两个buffer,所以实际上就是变成了frontBuffer),SurfaceFlinger的工作线程会在适当的刷新时刻,把系统中所有的frontBuffer混合在一起,然后通过OpenGL刷新到屏幕上。
[0088] Surface对象对应一个layer对象,如上图创建surface后在底层有了个Layer对象来具体实现绘制,layer的draw方法将surface需要画的东西数据准备好后通过eglSwapBuffer将图像显示到屏幕上去。
[0089] 清晰到模糊和模糊到清晰的动画
[0090] 因为在android系统中每个窗口都对应着一个layer,layer里面的draw方法就是实现窗口的绘制。
[0091] 实现清晰到模糊或者模糊到清晰具体的方法都是在原来的窗口上面盖上一层模糊的layer,layer里面实现draw方法去绘制一层模糊的图形,从清晰到模糊或者从模糊到清晰都是控制draw里面的绘制而达到的。
[0092] 模糊layer的具体实现关键在于draw里面的绘制
[0093] 控制模糊有两种方式叠加,一种是控制layer的透明度,另外一种是控制layer的模糊度。这两种效果结合起来使用可以在清晰到模糊的时候,一边变模糊一边变暗;在模糊到清晰的时候,一边变清晰一边变亮,这样就可以实现很好的过场效果。
[0094] 实现亮度变暗或者变亮
[0095] 就是在layer的draw的时候绘制一个RGB=黑色(0,0,0)的图形,但是它有一个透明度A I,就是这个RGB A I=(0,0,0,A I)当A I变成1的时候是全黑,变成0的时候是全透明的
[0096] 从亮到暗即A I的值从0到1逐渐变大
[0097] 从暗到亮即A I的值从1到0逐渐变小
[0098] 实现模糊的方法是:
[0099] 1.获取当前layer下面的图片
[0100] 2.将该图片进行模糊处理
[0101] 3.将模糊处理后的图片draw出来
[0102] 通过函数glReadPixels(X,Y,w,h,mReadFormat,mReadType,pixels);
[0103] 可以获得界面的像素点,存放在pixels里面
[0104] 我们接着根据pixels里面的像素做处理,让他实现模糊的效果。
[0105] 这个是调用函数status_t blurFilter(
[0106] GGLSurface const*image,
[0107] int kernelSizeUser,
[0108] int repeat)实现的
[0109] 对象image就是之前获取到的图片,将图片模糊化后直接拿到image就是模糊化后的效果图。
[0110] 具体的实现原理是将image这个像素矩阵里面每个像素周边的像素进行混合获取到一个新的像素
[0111] 例如图2中的像素点5,它是由周边的像素点1,2,3,4的像素值混合而来的,如果这个范围越广的话它就会变得越模糊,就是函数blurFilter里面最后一个参数混合次数repeat,当它的值越大图像越模糊,它的值越小越清晰。
[0112] 5A II=(1A2+2A2+3A2+4A2)/4
[0113] 5R=(1R+2R+3R+4R)/4
[0114] 5G=(1G+2G+3G+4G)/4
[0115] 5B=(1B+2B+3B+4B)/4
[0116] 从模糊到清晰:Alpha值变小,repeat值也变小;
[0117] 从清晰到模糊:Alpha值变大,repeat值也变大。
[0118] 以上所述仅为本发明的较佳实施例,凡依本发明权利要求范围所做的均等变化与修饰,皆应属本发明权利要求的涵盖范围。