CN104133663B - 可跟随屏幕自动旋转的浮窗实现的方法、装置和终端 - Google Patents

可跟随屏幕自动旋转的浮窗实现的方法、装置和终端 Download PDF

Info

Publication number
CN104133663B
CN104133663B CN201310334914.7A CN201310334914A CN104133663B CN 104133663 B CN104133663 B CN 104133663B CN 201310334914 A CN201310334914 A CN 201310334914A CN 104133663 B CN104133663 B CN 104133663B
Authority
CN
China
Prior art keywords
orientation
moment
floating window
rotation
window
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201310334914.7A
Other languages
English (en)
Other versions
CN104133663A (zh
Inventor
陈建铭
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Tencent Technology Shenzhen Co Ltd
Tencent Cloud Computing Beijing Co Ltd
Original Assignee
Tencent Technology Shenzhen Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Tencent Technology Shenzhen Co Ltd filed Critical Tencent Technology Shenzhen Co Ltd
Priority to CN201310334914.7A priority Critical patent/CN104133663B/zh
Priority to PCT/CN2014/083611 priority patent/WO2015014322A1/zh
Priority to US14/908,936 priority patent/US9703466B2/en
Publication of CN104133663A publication Critical patent/CN104133663A/zh
Application granted granted Critical
Publication of CN104133663B publication Critical patent/CN104133663B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/01Input arrangements or combined input and output arrangements for interaction between user and computer
    • G06F3/048Interaction techniques based on graphical user interfaces [GUI]
    • G06F3/0484Interaction techniques based on graphical user interfaces [GUI] for the control of specific functions or operations, e.g. selecting or manipulating an object, an image or a displayed text element, setting a parameter value or selecting a range
    • G06F3/04847Interaction techniques to control parameter settings, e.g. interaction with sliders or dials
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/01Input arrangements or combined input and output arrangements for interaction between user and computer
    • G06F3/048Interaction techniques based on graphical user interfaces [GUI]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/01Input arrangements or combined input and output arrangements for interaction between user and computer
    • G06F3/017Gesture based interaction, e.g. based on a set of recognized hand gestures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/01Input arrangements or combined input and output arrangements for interaction between user and computer
    • G06F3/048Interaction techniques based on graphical user interfaces [GUI]
    • G06F3/0481Interaction techniques based on graphical user interfaces [GUI] based on specific properties of the displayed interaction object or a metaphor-based environment, e.g. interaction with desktop elements like windows or icons, or assisted by a cursor's changing behaviour or appearance
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/01Input arrangements or combined input and output arrangements for interaction between user and computer
    • G06F3/048Interaction techniques based on graphical user interfaces [GUI]
    • G06F3/0484Interaction techniques based on graphical user interfaces [GUI] for the control of specific functions or operations, e.g. selecting or manipulating an object, an image or a displayed text element, setting a parameter value or selecting a range
    • G06F3/04842Selection of displayed objects or displayed text elements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2200/00Indexing scheme relating to G06F1/04 - G06F1/32
    • G06F2200/16Indexing scheme relating to G06F1/16 - G06F1/18
    • G06F2200/161Indexing scheme relating to constructional details of the monitor
    • G06F2200/1614Image rotation following screen orientation, e.g. switching from landscape to portrait mode
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2200/00Indexing scheme relating to G06F1/04 - G06F1/32
    • G06F2200/16Indexing scheme relating to G06F1/16 - G06F1/18
    • G06F2200/163Indexing scheme relating to constructional details of the computer
    • G06F2200/1637Sensing arrangement for detection of housing movement or orientation, e.g. for controlling scrolling or cursor movement on the display of an handheld computer

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Human Computer Interaction (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • User Interface Of Digital Computer (AREA)

Abstract

一种可跟随屏幕自动旋转的浮窗实现的方法、装置和终端。其中所述方法包括:为待显示的UI浮窗视图提供支持旋转属性的画面容器;生成画面对应的内容并添加到所述的画面容器中,所述的内容即为UI浮窗视图;获取***当前栈顶应用对应的方位属性以及***重力感应检测的方位,若发生变化,进行旋转补偿,重新绘制所述的浮窗,获得旋转逆矩阵;对所述的用户点击事件的坐标进行旋转逆变换,从而使得事件能够投递到对应的浮窗内部的UI组件上。本发明的技术方案具有计算量较小、处理效率更高、浮窗UI组件外观更自然的有益效果。

Description

可跟随屏幕自动旋转的浮窗实现的方法、装置和终端
技术领域
本发明涉及浮窗显示技术领域,尤其涉及可跟随屏幕自动旋转的浮窗实现的方法、装置以及终端。
背景技术
随着智能终端技术的突飞猛进及智能终端的业务迅猛发展,利用浮窗实现与用户的交互也越来越多样化。浮窗是用于弹出、可移动的独立窗口,frame、div等类似实现提示、通告等功能,通称为“浮动窗口”。在日常生活中,通过智能手机,平板电脑等终端我们可进行“浮窗预览”功能体验,从使用感受上来说,这项功能可以为我们提供非常高效的操作方式,让我们的终端更具人性化,加强了用户使用上的便利性。
Android平台上的应用程序,除了常见的在应用程序内与用户进行交互(即App的Activity)之外,通常希望在用户离开程序界面之后,还可以提供一些额外的交互,这可以通过浮窗UI(USER INTERFACE,即用户界面)进行实现。为了提供直观而且自然的浮窗UI交互体验,浮窗本身必须跟随屏幕旋转进行同步的旋转。
现有的Android平台上的所有UI组件并不支持旋转特性,要实现旋转特性,现有技术实现方式有:
实现方式一:修改Android的所有UI组件,使其支持跟随屏幕旋转而能够自适应旋转,除了修改Android所有UI组件,同时还必须修改Android的UI架构,工作量巨大,而且技术风险很大。
实现方式二:为同一浮窗内的整个View准备多套候选的View,根据屏幕的旋转情况选择其中一个候选的View进行显示,该方案虽然能够避免大规模修改Android UI框架,但是操作冗余,运行效率低下。
实现方式三:借助Android已有的View旋转动画,在检测到屏幕旋转时,对View进行同步旋转,并且在旋转结束后定格在动画结束状态处,该方案要求所有的浮窗UI整个View(递归的包括所有的子View)都必须要进行动画显示,效率低下,而且控制冗余。
发明内容
本发明实施例提供可跟随屏幕自动旋转的浮窗实现的方法、装置和终端,其实现浮窗UI组件旋转效率较高,工作量较小,而且技术风险不大。
本发明实施例采用以下技术方案:
第一方面,本发明实施例提供一种可跟随屏幕自动旋转的浮窗实现的方法,包括:
为待显示的UI浮窗视图提供支持旋转属性的画面容器;
生成画面对应的内容并添加到所述画面容器中,所述的内容即为UI浮窗视图;
获取***当前栈顶应用对应的方位属性以及***重力感应检测的方位,当***当前栈顶应用对应的方位或者/以及***重力感应检测的方位发生变化时,进行旋转补偿,重新绘制所述的UI浮窗,获得旋转逆矩阵;
对用户点击事件的坐标进行旋转逆变换,从而使得事件能够准确投递到对应的浮窗内部UI组件上。
第二方面,本发明实施例提供一种可跟随屏幕自动旋转的浮窗实现的装置,包括:
画面容器提供单元,用于为待显示的UI浮窗视图提供支持旋转属性的画面容器;
画面内容生成单元,用于生成画面对应的内容并添加到所述画面容器中,所述的内容即为UI浮窗视图;
方位获取单元:用于获取***当前栈顶应用对应的方位属性以及***重力感应检测的方位,当***当前栈顶应用对应的方位或者/以及***重力感应检测的方位发生变化时,进行旋转补偿,重新绘制所述的UI浮窗,获得旋转逆矩阵;
坐标旋转逆变换单元,用于对用户点击事件的坐标进行旋转逆变换,从而使得事件能够准确投递到对应的浮窗内部UI组件上。
第三方面,本发明实施例提供一种可跟随屏幕自动旋转的浮窗实现的终端,所述的终端包括如上述的可跟随屏幕自动旋转的浮窗实现的装置。
实施本技术方案的可跟随屏幕自动旋转的浮窗实现的方法、装置和终端,有益效果在于:
区别于现有技术中的浮窗UI组件实现旋转的功能,需要修改大量的UI组件,或需要准备多套画面候选,或需要动画显示,本技术方案通过重绘浮窗以及坐标的旋转逆变换等“假象”生成的浮窗UI组件看起来像没发生旋转一样,计算量较小,效率更高,浮窗UI组件外观更自然。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对本发明实施例描述中所需要使用的附图作简单的介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据本发明实施例的内容和这些附图获得其他的附图。
图1是本发明实施例一提供的可跟随屏幕自动旋转的浮窗实现方法流程图。
图2是本发明实施例二提供的可跟随屏幕自动旋转的浮窗实现方法流程图。
图3是本发明实施例三提供的可跟随屏幕自动旋转的浮窗实现方法流程图。
图4是本发明实施例一提供的可跟随屏幕自动旋转的浮窗实现装置的功能方框图。
图5是本发明实施例二提供的可跟随屏幕自动旋转的浮窗实现装置的功能方框图。
图6是本发明实施例三提供的可跟随屏幕自动旋转的浮窗实现装置的功能方框图。
图7是本发明实施例一提供的可跟随屏幕自动旋转的浮窗实现终端的功能方框图。
图8是本发明实施例二提供的可跟随屏幕自动旋转的浮窗实现终端的功能方框图。
图9是本发明实施例三提供的可跟随屏幕自动旋转的浮窗实现终端的功能方框图。
具体实施方式
为使本发明解决的技术问题、采用的技术方案和达到的技术效果更加清楚,下面将结合附图对本发明实施例的技术方案作进一步的详细描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本实施例的可跟随屏幕自动旋转的浮窗实现方法主要应用于各种具有触摸屏的智能终端,包括智能手机、电子书阅读器、MP3(Moving Picture Experts GroupAudio Layer III,动态影像专家压缩标准音频层面3)播放器、MP4(Moving PictureExperts Group Audio Layer IV,动态影像专家压缩标准音频层面4)播放器、笔记本电脑、平板电脑等。该触摸屏包括电阻式触摸屏和电容式触摸屏。
总的来说,本技术提供一种通用且高效率的可跟随屏幕自动旋转的浮窗UI技术方案。首先提供一个支持旋转属性的ViewGroup,并用该ViewGroup作为待显示的UI浮窗的内容View的容器。通过inflater的inflate()方法生成对应的内容View并添加到上述的ViewGroup中。获取当前的Activity对应的Orientation并监听Activity栈顶以便跟随Activity对应的Orientation的变化;获取当前重力传感器的Orientation并注册重力传感器***以便跟随传感器的方向。根据传感器方向以及屏幕的Orientation进行旋转补偿,重新绘制浮窗,同时获得旋转逆矩阵。当用户在浮窗区域内进行点击的时候,对点击事件的坐标进行旋转逆变换,从而使得事件能够投递到对应的浮窗内部UI组件上。
请参考图1,其是本发明方法的实施例一,一种可跟随屏幕自动旋转的浮窗实现方法流程图(以下以Android***具体说明),包括:
S101、为待显示的UI浮窗视图提供支持旋转属性的画面容器;
首先提供一个支持旋转属性的ViewGroup(记为RotateLayout),并用该ViewGroup作为待显示的UI浮窗的View的容器。
S102、生成画面对应的内容并添加到所述画面容器中,所述的内容即为UI浮窗视图;
可通过inflater的inflate()方法生成对应的内容View(记为内容View:ContentView)并添加到上述的ViewGroup中。
根据Android的UI绘制原理,绘制的控制权会先交到RotateLayout,再由其传递给其内部的子View。
S103、获取***当前栈顶应用对应的方位属性以及***重力感应检测的方位,当***当前栈顶应用对应的方位或者/以及***重力感应检测的方位发生变化时,进行旋转补偿,重新绘制所述的UI浮窗,获得旋转逆矩阵;
其中,***为具有Android平台的终端,方位的角度为90度的倍数,Orientation包括四个值:正竖屏、反竖屏、正横屏、反横屏,约定对应的旋转角度(逆时针)值为0度、180度、90度、270度。
S104、对所述的用户点击事件的坐标进行旋转逆变换,从而使得事件能够投递到对应的浮窗内部UI组件上。
在RotateLayout的相关方法中,如onDraw()、dispatchDraw()、dispatchTouchEvent()、onLayout()、onMeasure()几个方法中,可以先进行旋转的补偿,使得子View的绘制、事件投递等变得跟没旋转一样,从而实现旋转的透明支持。
需要说明的是,对于不同的智能终端操作***或不同的实现浮窗技术的编程语言,UI绘制原理的程序可能有所区别,对于本领域普通技术人员来说,其可根据不同操作***或不同的编程语言实现画面容器重绘浮窗UI组件以及旋转逆转换。
综上,本发明实施例一的可跟随屏幕自动旋转的浮窗实现的方法,通过重绘浮窗以及坐标的旋转逆变换等“假象”生成的浮窗UI组件,不需要改动原有的浮窗UI组件,新绘的浮窗UI组件看起来像没发生旋转一样,克服了现有技术中浮窗UI组件实现旋转的功能,需要修改大量的UI组件,或需要准备多套画面候选,或需要动画显示等等效率低下,计算复杂的不足,本技术方案具有计算量较小,效率更高,浮窗UI组件外观更自然的有益效果。
请参考图2,其是本发明方法的实施例二,一种可跟随屏幕自动旋转的浮窗实现方法流程图,步骤S201、S202、S208分别与实施例一中的S101、S102、S104相同,不同之处在于步骤S203、S204、S205、S206、S207,该方法包括:
S201、为待显示的UI浮窗视图提供支持旋转属性的画面容器;
S202、生成画面对应的内容并添加到所述的画面容器中,所述的内容即为UI浮窗视图;
S203、获取***当前栈顶应用对应的方位以及***重力感应检测的方位,记为第一时刻;同时注册***的重力传感器***,启动***栈顶监控程序,设置监控的时间间隔值;
其中,设置监控的时间间隔值可以为30秒至2分钟,根据实际情况而定,在这段间隔时间内,有可能终端转动后方位发生了改变,也有可能终端转动后回到了原来的位置。通过预设的时间间隔可以更清楚用户的动作,做出更节省内存运算的操作。
S204、当***重力传感器发生方位变化的时候,会通告***,此时根据***重新计算新的***重力感应检测的方位值,记为第二时刻;
较佳地,该步骤包括:判断***重力传感器发生方位是否变化,若发生了变化,进入S204a、通告***,此时根据***重新计算新的***重力感应检测的方位值,记为第二时刻;若没有发生变化,进入S204b、丢弃获取的方位数据。
S205、比较第一时刻获取的方位以及第二时时刻获取的方位,若发生变化,则进行旋转补偿,重新绘制所述的浮窗,获得旋转逆矩阵;
较佳地,该步骤包括:判断第一时刻获取的方位以及第二时时刻获取的方位是否变化,若发生了变化,进入S205a、通告***,此时根据***重新计算新的***重力感应检测的方位值,记为第二时刻;若没有发生变化,进入S205b、丢弃获取的方位数据。
更进一步地,本实施例二中还具有以下的步骤:
S206、等待预设的时间间隔,再次获取***当前栈顶应用对应的方位值,记为第三时刻;
S207、比较第二时刻获取的方位以及第三时时刻获取的方位,若发生变化,则进行旋转补偿,重新绘制所述的浮窗,获得旋转逆矩阵。
较佳地,该步骤包括:判断第二时刻获取的方位以及第三时时刻获取的方位是否发生变生,若发生变化,返回上述的步骤S205a,若没有发生变化,丢弃当前获取的方位数据。
S208、对所述的用户点击事件的坐标进行旋转逆变换,从而使得事件能够准确投递到对应的浮窗内部UI组件上。
综上,本实施例中,由于时间间隔的存在,如果终端检测到第一时刻与第二时刻没有发生方位变化,则有可能如下的步骤:丢弃第二时刻的数据或返回步骤S203等等,只有当检测到发生方位的变化,才进行重新绘制所述的浮窗,获得旋转逆矩阵之类的操作,本技术方案具有计算量更小,效率更高,浮窗UI组件外观更自然的有益效果之外,更进一步节省了***的资源,同时,更进一步减少了内存数据的运算。
请参考图3,其是本发明实施例三,一种可跟随屏幕自动旋转的浮窗实现方法流程图,与上述的实施例一大部分步骤相同,即:步骤S301、S302、S306分别与实施例一中的S101、S102、S104相同,不同之处在于步骤S303、S304、S305,该方法包括:
S301、为待显示的UI浮窗视图提供支持旋转属性的画面容器;
S302、生成画面对应的内容并添加到所述的画面容器中,所述的内容即为UI浮窗视图;
S303、获取当前的用户点击事件的活动对应的第一方位并监听所述的活动的栈顶,以便跟随所述的活动的对应的方位进行变化。
通过获取用户点击的方位并监听方位,可以更进一步明确用户的动向。
S304、获取当前的重力传感器的第二方位并注册所述的重力传感器的***,以便跟随所述的重力传感器的方向进行变化。
通过获取重力传感器的方位并监听方位,可以更进一步明确终端发生转换的动向。
S305、若发生变化,进行旋转补偿,重新绘制所述的浮窗,获得旋转逆矩阵;
S306、对所述的用户点击事件的坐标进行旋转逆变换,从而使得事件能够投递到对应的浮窗内部UI组件上。
以Android平台举例说明,获取当前的Activity对应的Orientation(记为ContextOrientation)并监听Activity栈顶以便跟随Activity对应的Orientation的变化。
获取当前重力传感器的Orientation(记为SensorOrientation)并注册重力传感器***以便跟随传感器的方向。
综上,本实施例中,通过跟随所述的用户点击的活动以及重力传感器的对应的方位的变化,从而作出重新绘制所述的浮窗,获得旋转逆矩阵之类的操作,使浮窗UI组件实现更具体、更细致、更精确。本技术方案具有计算量较小,效率更高,浮窗UI组件外观更自然的有益效果之外,更进一步实现了浮窗UI组件的及时性、灵活性以及应对性。
对于实施例一至三中的旋转算法,更具体地说明如下:
Orientation包括四个值:正竖屏、反竖屏、正横屏、反横屏。约定对应的旋转角度(逆时针)值为0度、180度、90度、270度。把上面的两个Orientation依次转化为角度值,分别记为:ContextDegree,SensorDegree。
根据公式,计算补偿角度:
CompsateDegree=-ContextDegree+SensorDegree。
其中,获取当前的Activity(用户点击事件)对应的Orientation(记为ContextOrientation)并监听Activity栈顶以便跟随Activity对应的Orientation的变化。
获取当前重力传感器的Orientation(记为SensorOrientation)并注册重力传感器***以便跟随传感器的方向。
当发现重力传感器的SensorOrientation或栈底的ContextOrientation发生变化时,则依据上述的补偿公式进行相应的旋转补偿。根据Android的显示原理,这可以通过把上述的角度更新到RotateLayout ViewGroup的一个属性值中,并通过RotateLayout的requestLayout()强制触发UI的重新布局和绘制。整个重新布局和重新绘制过程主要如下:
1、onMeasure():若旋转后的角度为90度/270度,则在measureChild()前进行宽高置换,否则不变。
2、onLayout():通过当前的旋转角度,利用Matrix.setRotate()计算旋转补偿矩阵,并对RotateLayout的显示坐标(相当于外框)进行相应的旋转。
3、onDraw():对传递进来的Canvas进行旋转,使得RotateLayout的绘制本身体现出旋转的结果。
4、dispatchDraw():在分发Canvas给到子View之前,对该Canvas进行旋转补偿,补偿的方法即为根据当前旋转的角度alpha,对Canvas围绕RotateLayout的中心点进行-alpha的旋转,这样子View在绘制时将能够体现出旋转的特性。
上述的结果使得RotateLayout内的子View不需要处理任何旋转相关逻辑,因为所有的旋转都被RotateLayout补偿过了,子View看起来就像旋转没有发生过一样。而这种假象仅仅建立在绘制的基础之上。
当用户在浮窗内进行点击的时候,和上述重布局和重绘逻辑一样,此时也必须对点击坐标进行旋转补偿,以便事件能够投递到真正的控件上。主要是:在RotateLayout的dispatchTouchEvent()中,通过前述的旋转矩阵,对传递进来的MotionEvent的坐标值进行旋转的预处理之后,通过super.dispatchTouchEvent(MotionEvent)再把事件投递到对应的子View上。
以下为本发明实施例的可跟随屏幕自动旋转的浮窗实现的装置,与可跟随屏幕自动旋转的浮窗实现的方法属于同一构思,在可跟随屏幕自动旋转的浮窗实现的装置实施例中未详尽描述的细节内容,可以参考上述方法实施例。
请参考图4,其是本发明实施例一,一种可跟随屏幕自动旋转的浮窗实现装置1,包括:
画面容器提供单元100,用于为待显示的UI浮窗视图提供支持旋转属性的画面容器;
画面内容生成单元200,用于生成画面对应的内容并添加到所述的画面容器中,所述的内容即为UI浮窗视图;
方位获取单元300,用于获取用户点击事件的活动的方位以及***检测的方位,若发生变化,进行旋转补偿,重新绘制所述的浮窗,获得旋转逆矩阵;
坐标旋转逆变换单元400,用于对所述的用户点击事件的坐标进行旋转逆变换,从而使得事件能够投递到对应的浮窗内部UI组件上。
其中,所述的***为具有Android平台的终端***,所述的方位的角度为90度的倍数,所述生成画面对应的内容,包括:通过inflater的inflate()方法生成对应的内容View并添加到所述的画面容器中。
综上,本发明实施例一的可跟随屏幕自动旋转的浮窗实现的装置1,通过重绘浮窗以及坐标的旋转逆变换等“假象”生成的浮窗UI组件,不需要改动原有的浮窗UI组件,新绘的浮窗UI组件看起来像没发生旋转一样,克服了现有技术中浮窗UI组件实现旋转的功能,需要修改大量的UI组件,或需要准备多套画面候选,或需要动画显示等等效率低下,计算复杂的不足,本技术方案具有计算量较小,效率更高,浮窗UI组件外观更自然的有益效果。
请参考图5,其是本发明实施例二,一种可跟随屏幕自动旋转的浮窗实现装置2,包括第一实施例中的画面容器提供单元100,画面内容生成单元200、坐标旋转逆变换单元400,不同之处在于:方位获取单元300,具体如下:
画面容器提供单元100,用于为待显示的UI浮窗视图提供支持旋转属性的画面容器;
画面内容生成单元200,用于生成画面对应的内容并添加到所述的画面容器中,所述的内容即为UI浮窗视图;
第一时刻记录单元301,用于获取***当前栈顶应用对应的方位以及***重力感应检测的方位,记为第一时刻;同时注册***的重力传感器***,启动***栈顶监控程序,设置监控的时间间隔值;
设置监控的时间间隔值可以为30秒至2分钟,根据实际情况而定,在这段间隔时间内,有可能终端转动后方位发生了改变,也有可能终端转动后回到了原来的位置。通过预设的时间间隔可以更清楚用户的动作,做出更节省内存运算的操作。
第二时刻记录单元302,用于当***重力传感器发生方位变化的时候,会通告***,此时根据***重新计算新的***重力感应检测的方位值,记为第二时刻;
第一方位比较单元303,用于比较第一时刻获取的方位以及第二时时刻获取的方位,若发生变化,则进行旋转补偿,重新绘制所述的浮窗,获得旋转逆矩阵;
更进一步地,本实施例二中的第一方位比较单元303还具有以下单元:
第三时刻记录单元304,用于等待预设的时间间隔,再次获取***当前栈顶应用对应的方位值,记为第三时刻;
第二方位比较单元305,用于比较第二时刻获取的方位以及第三时时刻获取的方位,若发生变化,则进行旋转补偿,重新绘制所述的浮窗,获得旋转逆矩阵。
坐标旋转逆变换单元400、对用户点击事件的坐标进行旋转逆变换,从而使得事件能够准确投递到对应的浮窗内部UI组件上。
综上,本实施例中,由于时间间隔的存在,如果终端检测到第一时刻与第二时刻没有发生方位变化,则有可能如下的步骤:丢弃第二时刻的数据或返回第一时刻方位记录单元301等等,只有当检测到发生方位的变化,才进行重新绘制所述的浮窗,获得旋转逆矩阵的操作,本技术方案具有计算量较小,效率更高,浮窗UI组件外观更自然的有益效果之外,更进一步节省了***的资源,同时,更进一步减少了内存数据的运算。
请参考图6,其是本发明实施例三,一种可跟随屏幕自动旋转的浮窗实现装置,与上述图5中的实施例一大部分模块相同,该装置包括了画面容器提供单元100、画面内容生成单元200、标旋转逆变换单元400,不同之处在于:方位获取单元300,具体说明如下:
画面容器提供单元100,用于为待显示的UI浮窗视图提供支持旋转属性的画面容器;
画面内容生成单元200,用于生成画面对应的内容并添加到所述的画面容器中,所述的内容即为UI浮窗视图;
第一方位获取单元401,用于获取当前的用户点击事件的活动对应的第一方位并监听所述的活动的栈顶,以便跟随所述的活动的对应的方位进行变化。
通过获取用户点击的方位并监听方位,可以更进一步明确用户的动向。
重力传感器获取单元402,用于获取当前的重力传感器的第二方位并注册所述的重力传感器的***,以便跟随所述的重力传感器的方向进行变化。
通过获取重力传感器的方位并监听方位,可以更进一步明确终端发生转换的动向。
旋转补偿单元403,用于当第一方位或第二方位发生变化时,进行旋转补偿,重新绘制所述的浮窗,获得旋转逆矩阵;
标旋转逆变换单元400、对用户点击事件的坐标进行旋转逆变换,从而使得事件能够准确投递到对应的浮窗内部UI组件上。
以Android平台举例说明,获取当前的Activity对应的Orientation(记为ContextOrientation)并监听Activity栈顶以便跟随Activity对应的Orientation的变化。
获取当前重力传感器的Orientation(记为SensorOrientation)并注册重力传感器***以便跟随传感器的方向。
综上,本实施例中,通过跟随所述的用户点击的活动以及重力传感器的对应的方位进行变化,从而作出重新绘制所述的浮窗,获得旋转逆矩阵之类的操作,使浮窗UI组件实现更具体、更细致、更精确。本技术方案具有计算量较小,效率更高,浮窗UI组件外观更自然的有益效果之外,更进一步实现了浮窗UI组件的及时性、灵活性以及应对性。
对于上述装置实施例中提到的旋转算法,更具体地说明如下:
Orientation包括四个值:正竖屏、反竖屏、正横屏、反横屏。约定对应的旋转角度(逆时针)值为0度、180度、90度、270度。把上面的两个Orientation依次转化为角度值,分别记为:ContextDegree,SensorDegree。
根据公式,计算补偿角度:
CompsateDegree=-ContextDegree+SensorDegree。
当发现重力传感器的SensorOrientation或栈底的ContextOrientation发生变化时,则依据上述的补偿公式进行相应的旋转补偿。根据Android的显示原理,这可以通过把上述的角度更新到RotateLayout ViewGroup的一个属性值中,并通过RotateLayout的requestLayout()强制触发UI的重新布局和绘制。整个重新布局和重新绘制过程主要如下:
1、onMeasure():若旋转后的角度为90度/270度,则在measureChild()前进行宽高置换,否则不变。
2、onLayout():通过当前的旋转角度,利用Matrix.setRotate()计算旋转补偿矩阵,并对RotateLayout的显示坐标(相当于外框)进行相应的旋转。
3、onDraw():对传递进来的Canvas进行旋转,使得RotateLayout的绘制本身体现出旋转的结果。
4、dispatchDraw():在分发Canvas给到子View之前,对该Canvas进行旋转补偿,补偿的方法即为根据当前旋转的角度alpha,对Canvas围绕RotateLayout的中心点进行-alpha的旋转,这样子View在绘制时将能够体现出旋转的特性。
上述的结果使得RotateLayout内的子View不需要处理任何旋转相关逻辑,因为所有的旋转都被RotateLayout补偿过了,子View看起来就像旋转没有发生过一样。而这种假象仅仅建立在绘制的基础之上。
当用户在浮窗内进行点击的时候,和上述重布局和重绘逻辑一样,此时也必须对点击坐标进行旋转补偿,以便事件能够投递到真正的控件上。主要是:在RotateLayout的dispatchTouchEvent()中,通过前述的旋转矩阵,对传递进来的MotionEvent的坐标值进行旋转的预处理之后,通过super.dispatchTouchEvent(MotionEvent)再把事件投递到对应的子View上。
请参阅图7,实施例一,一种可跟随屏幕自动旋转的浮窗实现的终端10,包括终端本体500,终端10还具有与终端本体500相连的可跟随屏幕自动旋转的浮窗实现的装置1。
由于具有可跟随屏幕自动旋转的浮窗实现的装置1,故:
本技术方案中的终端通过重绘浮窗以及坐标的旋转逆变换等“假象”生成的浮窗UI组件,不需要改动原有的浮窗UI组件,新绘的浮窗UI组件看起来像没发生旋转一样,克服了现有技术中浮窗UI组件实现旋转的功能,需要修改大量的UI组件,或需要准备多套画面候选,或需要动画显示等等效率低下,计算复杂的不足,本技术方案具有计算量较小,效率更高,浮窗UI组件外观更自然的有益效果。
请参阅图8,实施例二,一种可跟随屏幕自动旋转的浮窗实现的终端20,包括终端本体500,终端20具有与终端本体500相连的可跟随屏幕自动旋转的浮窗实现的装置2。
由于具有可跟随屏幕自动旋转的浮窗实现的装置2,故:
由于时间间隔的存在,如果终端检测到第一时刻与第二时刻没有发生方位变化,则有可能如下的步骤:丢弃第二时刻的数据或返回第一时刻方位记录单元301等等,只有当检测到发生方位的变化,才进行重新绘制所述的浮窗,获得旋转逆矩阵之类的操作,本技术方案具有计算量较小,效率更高,浮窗UI组件外观更自然的有益效果之外,更进一步节省了***的资源,同时,更进一步减少了内存数据的运算。
请参阅图9,实施例三,一种可跟随屏幕自动旋转的浮窗实现的终端30,包括终端本体500,终端30还包括与终端本体500相连的可跟随屏幕自动旋转的浮窗实现的装置3。
由于具有可跟随屏幕自动旋转的浮窗实现的装置3,故:
本实施例中,终端30通过跟随所述的用户点击的活动以及重力传感器的对应的方位进行变化,从而作出重新绘制所述的浮窗,获得旋转逆矩阵之类的操作,使浮窗UI组件实现更具体、更细致、更精确。本技术方案具有计算量较小,效率更高,浮窗UI组件外观更自然的有益效果之外,更进一步实现了浮窗UI组件的及时性、灵活性以及应对性。
其中,图7至图9中所述的终端本体500,具体包括:智能手机、电子书阅读器、MP3播放器、MP4播放器、笔记本电脑、平板电脑等等。
本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,该程序可以存储于一计算机可读存储介质中,存储介质可以包括存储器、磁盘或光盘等。
以上内容仅为本发明的较佳实施例,对于本领域的普通技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,本说明书内容不应理解为对本发明的限制。

Claims (17)

1.一种可跟随屏幕自动旋转的浮窗实现的方法,其特征在于,包括:
为待显示的UI浮窗视图提供支持旋转属性的画面容器;
生成画面对应的内容并添加到所述画面容器中,所述的内容即为UI浮窗视图;
获取***当前栈顶应用对应的方位属性以及***重力感应检测的方位,当***当前栈顶应用对应的方位或者/以及***重力感应检测的方位发生变化时,进行旋转补偿,重新绘制所述的UI浮窗,获取旋转逆矩阵;所述的旋转补偿,包括:计算补偿角度;根据所述补偿角度进行相应的旋转补偿;
根据所述旋转逆矩阵对用户点击事件的坐标进行旋转逆变换,从而使得所述事件能够投递到对应的浮窗内部UI组件上。
2.根据权利要求1所述的方法,其特征在于,所述的***为具有Android平台的终端***。
3.根据权利要求1所述的方法,其特征在于,所述的方位的角度为90度的整数倍数。
4.根据权利要求1至3任一项所述的方法,其特征在于,所述生成画面对应的内容并添加到所述画面容器中,包括:通过inflater的inflate()方法生成对应的内容View并添加到所述画面容器中。
5.根据权利要求1所述的方法,其特征在于,所述的获取***当前栈顶应用对应的方位以及***重力感应检测的方位,当***当前栈顶应用对应的方位或者/以及***重力感应检测的方位发生变化时,进行旋转补偿,重新绘制所述的UI浮窗,获得旋转逆矩阵,包括:
获取***当前栈顶应用对应的方位以及***重力感应检测的方位,记为第一时刻;同时注册***的重力传感器***,启动***栈顶监控程序,设置监控的时间间隔值;
当***重力传感器发生方位变化的时候,通告***,此时根据***重新计算新的***重力感应检测的方位值,记为第二时刻;
比较第一时刻获取的方位以及第二时时刻获取的方位,若发生变化,则进行旋转补偿,重新绘制所述的浮窗,获得旋转逆矩阵。
6.根据权利要求5所述的方法,其特征在于,所述的比较第一时刻获取的方位以及第二时时刻获取的方位,若发生变化,则进行旋转补偿,重新绘制所述的浮窗,获得旋转逆矩阵之后,具有以下步骤:
等待预设的时间间隔,再次获取***当前栈顶应用对应的方位值,记为第三时刻;
比较第二时刻获取的方位以及第三时时刻获取的方位,若发生变化,则进行旋转补偿,重新绘制所述的浮窗,获得旋转逆矩阵。
7.根据权利要求1所述的方法,其特征在于,所述计算补偿角度的公式为:
CompsateDegree=-ContextDegree+SensorDegree;
其中,CompsateDegree为补偿角度值;
ContextDegree为用户点击事件的活动的方位值;
SensorDegree为***检测的方位值。
8.根据权利要求1所述的方法,其特征在于,所述的方位,包括:正竖屏、反竖屏、正横屏或反横屏。
9.一种可跟随屏幕自动旋转的浮窗实现的装置,其特征在于,包括:
画面容器提供单元,用于为待显示的UI浮窗视图提供支持旋转属性的画面容器;
画面内容生成单元,用于生成画面对应的内容并添加到所述画面容器中,所述的内容即为UI浮窗视图;
方位获取单元,用于获取***当前栈顶应用对应的方位属性以及***重力感应检测的方位,当***当前栈顶应用对应的方位或者/以及***重力感应检测的方位发生变化时,进行旋转补偿,重新绘制所述的UI浮窗,获取旋转逆矩阵;其中,所述的旋转补偿,包括:计算补偿角度;根据补偿角度进行相应的旋转补偿;
坐标旋转逆变换单元,用于根据所述旋转逆矩阵对用户点击事件的坐标进行旋转逆变换,从而使得所述的事件能够投递到对应的浮窗内部UI组件上。
10.根据权利要求9所述的装置,其特征在于,所述的***为具有Android平台的终端***。
11.根据权利要求9所述的装置,其特征在于,所述的方位的角度为90度的整数倍数。
12.根据权利要求9至11任一项所述的装置,其特征在于,所述生成画面对应的内容,包括:通过inflater的inflate()方法生成对应的内容View并添加到所述的画面容器中。
13.根据权利要求9所述的装置,其特征在于,所述的方位获取单元,包括:
第一时刻获取单元,用于获取***当前栈顶应用对应的方位以及***重力感应检测的方位,记为第一时刻,同时注册***的重力传感器***,启动***栈顶监控程序,设置监控的时间间隔值;
第二时刻获取单元,用于当***重力传感器发生方位变化的时候,通告***,此时根据***重新计算新的***重力感应检测的方位值,记为第二时刻;
第一方位比较单元,用于比较第一时刻获取的方位以及第二时时刻获取的方位,若发生变化,则进行旋转补偿,重新绘制所述的浮窗,获得旋转逆矩阵。
14.根据权利要求13所述的装置,其特征在于,所述的第一方位比较单元之后具有以下单元:
第三时刻获取单元,用于等待预设的时间间隔,再次获取***当前栈顶应用对应的方位值,记为第三时刻;
第二方位比较单元,用于比较第二时刻获取的方位以及第三时时刻获取的方位,若发生变化,则进行旋转补偿,重新绘制所述的浮窗,获得旋转逆矩阵。
15.根据权利要求9所述的装置,其特征在于,所述的旋转补偿,具体包括:所述的旋转补偿的补偿角度的公式为:
CompsateDegree=-ContextDegree+SensorDegree;
其中,CompsateDegree为补偿角度值;
ContextDegree为用户点击事件的活动的方位值;
SensorDegree为***检测的方位值。
16.根据权利要求9所述的装置,其特征在于,所述的方位,包括:正竖屏、反竖屏、正横屏、反横屏。
17.一种可跟随屏幕自动旋转的浮窗实现的终端,其特征在于,所述的终端包括如权利要求9至16任一项所述的可跟随屏幕自动旋转的浮窗实现的装置。
CN201310334914.7A 2013-08-02 2013-08-02 可跟随屏幕自动旋转的浮窗实现的方法、装置和终端 Active CN104133663B (zh)

Priority Applications (3)

Application Number Priority Date Filing Date Title
CN201310334914.7A CN104133663B (zh) 2013-08-02 2013-08-02 可跟随屏幕自动旋转的浮窗实现的方法、装置和终端
PCT/CN2014/083611 WO2015014322A1 (zh) 2013-08-02 2014-08-04 一种实现旋转浮窗的方法、装置和终端
US14/908,936 US9703466B2 (en) 2013-08-02 2014-08-04 Method, device and terminal for implementing rotation of floating window

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201310334914.7A CN104133663B (zh) 2013-08-02 2013-08-02 可跟随屏幕自动旋转的浮窗实现的方法、装置和终端

Publications (2)

Publication Number Publication Date
CN104133663A CN104133663A (zh) 2014-11-05
CN104133663B true CN104133663B (zh) 2015-07-29

Family

ID=51806351

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201310334914.7A Active CN104133663B (zh) 2013-08-02 2013-08-02 可跟随屏幕自动旋转的浮窗实现的方法、装置和终端

Country Status (3)

Country Link
US (1) US9703466B2 (zh)
CN (1) CN104133663B (zh)
WO (1) WO2015014322A1 (zh)

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2017094104A1 (ja) * 2015-12-01 2017-06-08 株式会社ロイヤルコーポレーション 炭化水素油の増量方法及びその装置
CN105447821B (zh) * 2015-12-24 2019-07-09 广州乐霸网络科技有限公司 一种移动终端网页游戏自适应旋转的方法及装置
JP6659148B2 (ja) * 2016-02-03 2020-03-04 キヤノン株式会社 表示制御装置及びその制御方法、プログラム、並びに記憶媒体
CN106610771A (zh) * 2016-12-12 2017-05-03 广州神马移动信息科技有限公司 一种语音识别界面的生成和自适应旋转的方法和装置
CN109144354B (zh) * 2017-06-15 2021-04-02 阿里巴巴(中国)有限公司 旋转播放器视图层的方法和设备
CN110362366B (zh) * 2018-04-02 2022-06-24 青岛海信移动通信技术股份有限公司 一种应用界面显示方法及装置
CN108848593A (zh) * 2018-06-27 2018-11-20 四川斐讯信息技术有限公司 一种母婴灯、母婴灯亮度的调节方法及***

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101063928A (zh) * 2006-04-28 2007-10-31 三星电子株式会社 控制便携设备的用户界面屏幕方向的方法和装置
CN101673537A (zh) * 2008-09-08 2010-03-17 英华达(上海)电子有限公司 一种屏幕画面旋转的实现装置及方法
CN102567524A (zh) * 2011-12-29 2012-07-11 中兴通讯股份有限公司 一种立体旋转浏览的实现方法和装置
CN102594973A (zh) * 2011-01-06 2012-07-18 中兴通讯股份有限公司 终端及其显示方法

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10259A (en) * 1853-11-22 Improvement in revolving fire-arms
KR100630150B1 (ko) * 2005-06-07 2006-10-02 삼성전자주식회사 휴대단말기의 화면표시방법
CN101789132A (zh) * 2010-01-22 2010-07-28 苏州领航自动化科技有限公司 一种单视图多OpenGL视口的显示方法
KR101758164B1 (ko) * 2011-04-08 2017-07-26 엘지전자 주식회사 이동 단말기 및 3d 멀티 앵글 뷰 제어방법
CN102662659B (zh) * 2012-03-21 2015-12-02 北京奇虎科技有限公司 一种图像显示处理方法及***
CN102695034A (zh) * 2012-05-30 2012-09-26 青岛海信移动通信技术股份有限公司 在可视通话中调整视频图像在对端显示的方法及装置
CN102903052A (zh) * 2012-10-30 2013-01-30 互动通天图信息技术有限公司 一种移动广告播放方法

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101063928A (zh) * 2006-04-28 2007-10-31 三星电子株式会社 控制便携设备的用户界面屏幕方向的方法和装置
CN101673537A (zh) * 2008-09-08 2010-03-17 英华达(上海)电子有限公司 一种屏幕画面旋转的实现装置及方法
CN102594973A (zh) * 2011-01-06 2012-07-18 中兴通讯股份有限公司 终端及其显示方法
CN102567524A (zh) * 2011-12-29 2012-07-11 中兴通讯股份有限公司 一种立体旋转浏览的实现方法和装置

Also Published As

Publication number Publication date
US9703466B2 (en) 2017-07-11
US20160179357A1 (en) 2016-06-23
WO2015014322A1 (zh) 2015-02-05
CN104133663A (zh) 2014-11-05

Similar Documents

Publication Publication Date Title
CN104133663B (zh) 可跟随屏幕自动旋转的浮窗实现的方法、装置和终端
US9886187B2 (en) Deformable display device and method for controlling thereof
KR102043810B1 (ko) 플렉서블 디스플레이 장치 및 그 제어 방법
US20190339854A1 (en) Multi-screen interaction touch display method, apparatus, storage medium and terminal
KR102004409B1 (ko) 플렉서블 디스플레이 장치 및 그 제어 방법
US10126878B2 (en) Pressure-sensitive touch screen display and method
JP6606300B1 (ja) 表示画面、携帯端末及びモジュラ端末装置
CN104823134A (zh) 柔性显示装置及柔性显示装置控制方法
CN104641320A (zh) 柔性显示装置及其显示方法
US20160062613A1 (en) Electronic device for copying and pasting objects and method thereof
US20150253968A1 (en) Portable terminal and method of enlarging and displaying contents
CN106777380A (zh) 浏览器页面显示方法、装置和终端
US10146341B2 (en) Electronic apparatus and method for displaying graphical object thereof
CN105760070A (zh) 用于同时显示更多个项的方法和设备
CN107765773A (zh) 一种显示信息的方法、装置、终端及存储介质
CN105094487A (zh) 触摸屏及其控制方法、控制装置、触摸显示装置
US20160070467A1 (en) Electronic device and method for displaying virtual keyboard
CN104423777A (zh) 一种窗口显示的方法及装置
CN102869078A (zh) 一种模拟透明屏幕的方法和移动终端
CN104090734A (zh) 一种信息处理方法及电子设备
CN103870117B (zh) 一种信息处理方法及电子设备
CN103870118A (zh) 信息处理方法及电子设备
KR101935029B1 (ko) 플렉서블 디스플레이 장치 및 그 제어 방법
CN102866835B (zh) 一种互动信息屏***
CN105786540A (zh) 一种应用管理方法及电子设备

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
TR01 Transfer of patent right
TR01 Transfer of patent right

Effective date of registration: 20200826

Address after: 518000 Nanshan District science and technology zone, Guangdong, Zhejiang Province, science and technology in the Tencent Building on the 1st floor of the 35 layer

Co-patentee after: TENCENT CLOUD COMPUTING (BEIJING) Co.,Ltd.

Patentee after: TENCENT TECHNOLOGY (SHENZHEN) Co.,Ltd.

Address before: Shenzhen Futian District City, Guangdong province 518000 Zhenxing Road, SEG Science Park 2 East Room 403

Patentee before: TENCENT TECHNOLOGY (SHENZHEN) Co.,Ltd.