首页 / 专利库 / 资料储存系统 / 复杂事件处理 / 一种基于复杂环境下实现开关可滑动可点击的方法

一种基于复杂环境下实现开关可滑动可点击的方法

阅读:933发布:2020-05-16

专利汇可以提供一种基于复杂环境下实现开关可滑动可点击的方法专利检索,专利查询,专利分析的服务。并且本 发明 提供了一种基于复杂环境下实现 开关 可滑动可点击的方法,所述方法为:1、在复杂环境下创建一开关类SuperButton,获得该开关类SuperButton的背景图片所占的大小作为一开关视图的大小,并将该开关视图绘制到屏幕上;2、开关视图显示后,对开关视图加入点击和滑动的控制逻辑;3、接收 手指 对开关视图的滑动或点击事件,完成开关的滑动或点击处理。本发明使得控件能够完美适用各种简单或者复杂的应用场景,不会出现卡顿甚至不能正常开关的情况。,下面是一种基于复杂环境下实现开关可滑动可点击的方法专利的具体信息内容。

1.一种基于复杂环境下实现开关可滑动可点击的方法,其特征在于:所述方法包括如下步骤:
步骤1、在复杂环境下创建一开关类SuperButton,获得该开关类SuperButton的背景图片所占的大小作为一开关视图的大小,并将该开关视图绘制到屏幕上;所述复杂环境包括:
滑动类及滚动类的视图控件,继承自容器类的控件ViewGroup的自定义控件,或者原生控件的环境下;所述滑动类及滚动类的视图控件包括ViewPager控件、ListView控件、ScrollView控件、HorizontalScrollView控件;在复杂环境的外部控件对外部触摸事件处理的情况下,开关的触摸事件将与所述外部触摸事件的处理产生冲突,而开关的触摸事件无法得到执行时,要重写dispatchTouchEvent(MotionEvent event)方法,在这个方法内部调用requestDisallowInterceptTouchEvent(true)方法,请求外部控件的父控件不要拦截开关的触摸事件,让开关类SuperButton自己处理发生的开关的触摸事件;所述开关的触摸事件包括:按下事件、移动事件或抬起事件;
步骤2、开关视图显示后,对开关视图加入点击和滑动的控制逻辑;
所述点击的控制逻辑为:通过重写onClick(view)方法控制点击事件,设定一个表示开关状态的变量,根据该变量的值来改变滑动开关的位置,并刷新屏幕的界面;
所述滑动的控制逻辑为:对触摸事件进行处理,重写onTouchEvent(event)方法:当发生按下事件时,记录按下位置;当发生移动事件时,根据手指按在开关滑上的移动距离实时刷新界面;当发生抬起事件时,根据此时开关滑块的移动距离判断开关状态,并刷新界面;
步骤3、接收手指对开关视图的滑动或点击事件,完成开关的滑动或点击处理。
2.根据权利要求1所述的一种基于复杂环境下实现开关可滑动可点击的方法,其特征在于:所述步骤1具体为:创建一开关类SuperButton,所述开关类SuperButton继承开关控件的父类View,通过构造方法创建开关对象,调用onMeasure(int,int)方法测量开关对象的背景图片所占的大小作为开关视图的大小,并调用onDraw(canvas)方法将该开关视图绘制到屏幕上。
3.根据权利要求1所述的一种基于复杂环境下实现开关可滑动可点击的方法,其特征在于:所述步骤2中根据该变量的值来改变滑动开关的位置,具体为:所述变量为布尔类型,变量初始值设置为true,表示开的状态,当发生点击事件后,将变量的值改为false,再点击时,将变量的值改为true,以此类推;改变变量的值后,要同时修改开关滑块距离界面左边界的值;其中,开关开的时候开关滑块距离界面左边界的值为开关视图的长度减去开关滑块的长度,开关关的时候开关滑块距离界面左边界的值为0。
4.根据权利要求1所述的一种基于复杂环境下实现开关可滑动可点击的方法,其特征在于:所述根据手指按在开关滑块上的移动距离实时刷新界面,具体为:根据手指按在开关滑块上的移动距离来改变开关滑块距离界面左边界的值,当这个值等于最大值时就不再变大,所述最大值为开关视图的长度减去开关滑块的长度,开关滑块的移动距离变化时,界面也随之刷新。
5.根据权利要求4所述的一种基于复杂环境下实现开关可滑动可点击的方法,其特征在于:所述根据此时开关滑动的距离判断开关状态,具体为:根据此时开关滑动的距离是否超过所述最大值的一半判断开关状态,若超过最大值,开关状态为开,否则,开关状态为关,并刷新界面。

说明书全文

一种基于复杂环境下实现开关可滑动可点击的方法

技术领域

[0001] 本发明涉及安卓系统技术领域,特别涉及一种基于复杂环境下实现开关可滑动可点击的方法。

背景技术

[0002] Android(安卓)开关的切换从4.0(API 14)(应用程序编程接口)开始引入新的控件Switch,此外还有用起来简单的ToggleButton(开关),或者用CheckBox(复选框)或者用两张图片点击切换。但是这些都存在不足之处,不能实现滑动切换,使用CheckBox时还会存在焦点冲突的问题。通过对Android原生控件的实现方式进行研究,实现自定义可点击可滑动的开关其实并不难,但是需要注意的是,如果放在稍微复杂的环境中,原本运行完美的滑动点击的开关,往往会出现卡顿甚至不能正常开关的情况。

发明内容

[0003] 本发明要解决的技术问题,在于提供一种基于复杂环境下实现开关可滑动可点击的方法,使得控件能够完美适用各种简单或者复杂的应用场景,不会出现卡顿甚至不能正常开关的情况。
[0004] 本发明的技术问题是这样实现的:一种基于复杂环境下实现开关可滑动可点击的方法,所述方法包括如下步骤:
[0005] 步骤1、在复杂环境下创建一开关类SuperButton,获得该开关类SuperButton的背景图片所占的大小作为一开关视图的大小,并将该开关视图绘制到屏幕上;
[0006] 步骤2、开关视图显示后,对开关视图加入点击和滑动的控制逻辑;
[0007] 所述点击的控制逻辑为:通过重写onClick(view)方法控制点击事件,设定一个表示开关状态的变量,根据该变量的值来改变滑动开关的位置,并刷新屏幕的界面;
[0008] 所述滑动的控制逻辑为:对触摸事件进行处理,重写onTouchEvent(event)方法:当发生按下事件时,记录按下位置;当发生移动事件时,根据手指按在开关滑上的移动距离实时刷新界面;当发生抬起事件时,根据此时开关滑块的移动距离判断开关状态,并刷新界面;
[0009] 步骤3、接收手指对开关视图的滑动或点击事件,完成开关的滑动或点击处理。
[0010] 进一步地,所述步骤1具体为:创建一开关类SuperButton,所述开关类SuperButton继承开关控件的父类View,通过构造方法创建开关对象,调用onMeasure(int,int)方法测量开关对象的背景图片所占的大小作为开关视图的大小,并调用onDraw(canvas)方法将该开关视图绘制到屏幕上。
[0011] 进一步地,所述步骤2中根据该变量的值来改变滑动开关的位置,具体为:所述变量为布尔类型,变量初始值设置为true,表示开的状态,当发生点击事件后,将变量的值改为false,再点击时,将变量的值改为true,以此类推;改变变量的值后,要同时修改开关滑块距离界面左边界的值;其中,开关开的时候开关滑块距离界面左边界的值为开关视图的长度减去开关滑块的长度,开关关的时候开关滑块距离界面左边界的值为0。
[0012] 进一步地,所述根据手指按在开关滑块上的移动距离实时刷新界面,具体为:根据手指按在开关滑块上的移动距离来改变开关滑块距离界面左边界的值,当这个值等于最大值时就不再变大,所述最大值为开关视图的长度减去开关滑块的长度,开关滑块的移动距离变化时,界面也随之刷新。
[0013] 进一步地,所述根据此时开关滑动的距离判断开关状态,具体为:根据此时开关滑动的距离是否超过所述最大值的一半判断开关状态,若超过最大值,开关状态为开,否则,开关状态为关,并刷新界面。
[0014] 进一步地,所述复杂环境包括:滑动类及滚动类的视图控件,继承自容器类的控件ViewGroup的自定义控件,或者原生控件的环境下;所述滑动类及滚动类的视图控件包括ViewPager控件、ListView控件、ScrollView控件、HorizontalScrollView控件。
[0015] 进一步地,在复杂环境的外部控件对外部触摸事件处理的情况下,开关的触摸事件将与所述外部触摸事件的处理产生冲突,而开关的触摸事件无法得到执行时,要重写dispatchTouchEvent(MotionEvent event)方法,在这个方法内部调用requestDisallowInterceptTouchEvent(true)方法,请求外部控件的父控件不要拦截开关的触摸事件,让开关类SuperButton自己处理发生的开关的触摸事件;所述开关的触摸事件包括:按下事件、移动事件或抬起事件。
[0016] 本发明的优点在于:本发明通过研究Android原生控件的实现原理,实现可以滑动点击的自定义开关,并针对目前常见的控件存在的问题,修改自定义开关的触摸(Touch)事件的处理,使得控件能够完美适用各种简单或者复杂的应用场景,不会出现卡顿甚至不能正常开关的情况。附图说明
[0017] 图1为本发明的方法流程示意图。
[0018] 图2为本发明滑动的控制逻辑的流程示意图。
[0019] 图3为本发明开关的触摸事件将与所述外部触摸事件的处理产生冲突情况下,滑动的控制逻辑的流程示意图。

具体实施方式

[0020] 请参阅图1至图3所示,本发明的一种基于复杂环境下实现开关可滑动可点击的方法,所述方法包括如下步骤:
[0021] 步骤1、在复杂环境下创建一开关类SuperButton,获得该开关类SuperButton的背景图片所占的大小作为一开关视图的大小,并将该开关视图绘制到屏幕上;所述步骤1具体为:创建一开关类SuperButton,所述开关类SuperButton继承开关控件的父类View,通过构造方法创建开关对象,调用onMeasure(int,int)方法测量开关对象的背景图片所占的大小作为开关视图的大小,并调用onDraw(canvas)方法将该开关视图绘制到屏幕上。所述复杂环境包括:滑动类及滚动类的视图控件,继承自容器类的控件ViewGroup的自定义控件,或者原生控件的环境下;所述滑动类及滚动类的视图控件包括ViewPager控件、ListView控件、ScrollView控件、HorizontalScrollView控件。
[0022] 步骤2、开关视图显示后,对开关视图加入点击和滑动的控制逻辑;
[0023] 所述点击的控制逻辑为:通过重写onClick(view)方法控制点击事件,设定一个表示开关状态的变量,根据该变量的值来改变滑动开关的位置,并刷新屏幕的界面;这样就实现了点击改变开关状态。
[0024] 所述步骤2中根据该变量的值来改变滑动开关的位置,具体为:所述变量为布尔类型,变量初始值设置为true,表示开的状态,当发生点击事件后,将变量的值改为false,再点击时,将变量的值改为true,以此类推;改变变量的值后,要同时修改开关滑块距离界面左边界的值;其中,本实施例中,开关开的时候开关滑块距离界面左边界的值为开关视图的长度减去开关滑块的长度,开关关的时候开关滑块距离界面左边界的值为0。
[0025] 所述滑动的控制逻辑为:要实现滑动功能,需要对触摸事件进行处理,重写onTouchEvent(event)方法:当发生ACTION_DOWN按下事件时,记录按下位置;当发生ACTION_MOVE移动事件时,根据手指按在开关滑块上的移动距离实时刷新界面;当发生ACTION_UP抬起事件时,根据此时开关滑块的移动距离判断开关状态,并刷新界面;
[0026] 步骤3、接收手指对开关视图的滑动或点击事件,完成开关的滑动或点击处理。
[0027] 其中,所述根据手指按在开关滑块上的移动距离实时刷新界面,具体为:根据手指按在开关滑块上的移动距离来改变开关滑块距离界面左边界的值,当这个值等于最大值时就不再变大,本实施例中是开的状态,所述最大值为开关视图的长度减去开关滑块的长度,开关滑块的移动距离变化时,界面也随之刷新。
[0028] 所述根据此时开关滑动的距离判断开关状态,具体为:根据此时开关滑动的距离是否超过所述最大值的一半判断开关状态,若超过最大值,开关状态为开,否则,开关状态为关,并刷新界面。
[0029] 另外,如图3所示,本发明在复杂环境的外部控件对外部触摸事件处理的情况下,开关的触摸事件将与所述外部触摸事件的处理产生冲突,而开关的触摸事件无法得到执行时,要重写dispatchTouchEvent(MotionEvent event)方法,在这个方法内部调用requestDisallowInterceptTouchEvent(true)方法,请求外部控件的父控件不要拦截开关的触摸事件,让开关类SuperButton自己处理发生的开关的触摸事件;所述开关的触摸事件包括:按下事件、移动事件或抬起事件。
[0030] 总之,本发明不仅能完美的实现滑动和点击改变开关状态的功能,同时在开关处于复杂环境中,依然能够完美的实现相关功能,而不会出现卡顿现象。通过对onClick(view)和onTouchEvent(event)的重写,实现了点击和滑动的控制。通过对复杂环境的分析,加入对Touch事件冲突的处理,通过requestDisallowInterceptTouchEvent(true)方法使自定义开关SuperButton独立处理与之相关的Touch事件来实现想要的功能。
[0031] 以上所述仅为本发明的较佳实施例,凡依本发明申请专利范围所做的均等变化与修饰,皆应属本发明的涵盖范围。
高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈