本发明涉及开关按钮交互技术领域,具体说是一种滑动开关按钮的实现方法。
背景技术:
android系统虽然提供switch开关按钮(switch控件),但默认样式不美观。主要用于展示状态(开启状态及关闭状态)。
在android开发中,我们可以通过改变默认的switch控件外观来达到美化自己界面的目的,大概有以下几种方法:
1、修改控件属性,
2、代码中继承原switch类,重新定义ondraw方法,
3、自定义style样式。
高版本的android系统对switch开关按钮(switch控件)进行了美化,但是低版本手机不支持。这导致不同机型展示的预期效果不统一。
技术实现要素:
针对现有技术中存在的缺陷,本发明的目的在于提供一种滑动开关按钮的实现方法,通过自定义switch开关按钮(switch控件),实现滑动开关按钮,不同版本、不同机型具有一样的美化效果,可按需增加移动动画效果,减少了状态突变的突兀感,增加用户的体验。
为达到以上目的,本发明采取的技术方案是:
一种滑动开关按钮的实现方法,其特征在于,包括如下步骤:
步骤1,定义滑动开关按钮类slideswitch,继承android系统提供的view;
步骤2,定义监听及回调接口onswitchchangedlistener,用于提供状态的监听和回调;
步骤3,定义必要参数,用于设定滑动开关按钮相关的基础信息;
步骤4,定义画笔变量mpaint,是android系统的paint类型的变量,用于绘制;
步骤5,定义变量monswitchchangedlistener,是自定义的接口,用于对外部调用时的状态回传;
步骤6,初始化位图,计算背景图片的宽和高;
位图通过android系统提供用于获取resources对象的getresources方法获得;
默认位图为做好的图片资源r.drawable.bg_switch_off、r.drawable.bg_switch_on及r.drawable.switch_thumb;
通过android系统bitmap对象的getwidth和getheight方法获取图片的宽和高;
步骤7,设定setonswitchchangedlistener方法,传过来接口对象用来监听状态的变化,
设定setstatus方法,用于改变控件当前的状态信息;
步骤8,重写ontouchevent方法,监听用户按下、移动、抬起的事件,和滑动动画处理;
步骤9,重写ondraw方法根据不同的状态绘制背景图和文字提示信息。
在上述技术方案的基础上,步骤3中,所述必要参数包括:
用于代表当前控件的状态的常量参数,包括:
switch_off,控件关闭,是android系统的int类型,
switch_on,控件开启,是android系统的int类型,
switch_scroling,控件滑动,是android系统的int类型;
定义变量mswitchstatus,是android系统的int类型的变量,用于标记控件当前的状态;
定义字符串变量montext和mofftext,都是android系统的string类型的变量,用于提示空间当前的状态;
定义布尔类型变量mhasscrolled,默认值false,是android系统的boolean类型的变量,用于标记是否发生滚动;
定义变量msrcx和mdstx,都是android系统的int类型的变量,用于标记中间圆形的起始x坐标和结束x坐标;
定义变量mswitch_off、mswitch_on和mswitch_thumb,都是android系统的bitmap类型的变量,用于加载不同状态时的背景图片;
定义变量mbmpwidth、mbmpheight和mthumbwidth,都是android系统的int类型的变量,用于计算背景图片的宽和高和中间图片的宽。
在上述技术方案的基础上,步骤3中,所述必要参数进一步包括:
不同状态的文字提示,包括:ontext和offtext,是android系统提供的string类型的变量。
在上述技术方案的基础上,步骤8中,通过android系统提供的事件对象event,解析出事件的类型和当前的x,y坐标信息,
当检测到用户移动时,调用系统view控件提供的invalidate方法用于对当前控件进行重绘。
在上述技术方案的基础上,步骤9中,根据android系统提供的画布对象canvas,通过android系统paint对象的settextsize方法设置画笔的字体大小,以适配画布;
通过自定义方法drawbitmap统一绘制图片,
在绘制过程前,通过android系统提供的paint里对象的setcolor方法设置画笔的颜色,
在绘制过程中,通过android系统canvas对象的drawbitmap方法绘制bitmap,所述bitmap是要绘制的目标位图对象,
在绘制过程中,通过canvas对象的drawtext方法在画布上绘制文字提示信息,
在绘制过程中,通过cliprect方法对画布进行裁剪,只显示裁剪后的部分,通过android系统canvas对象里的translate方法对画布进行平移,
在绘制过程中,通过canvas对象里的restoretocount方法对当前画笔信息进行保存。
在上述技术方案的基础上,步骤9中,进一步通过android系统paint对象的settypeface方法设置字体的类型。
在上述技术方案的基础上,步骤9中,进一步定义animationtransrunnable类实现android系统提供runnable接口,用于实现移动的动画效果。
在上述技术方案的基础上,实现移动的动画效果时,通过参数srcx代表中间小圆形起始的x坐标的位置,通过参数dstx代表中间小圆形要移动到的x坐标的位置,通过参数duration代表动画执行的时间,通过android系统自定义view内提供的postinvalidate方法对控件进行重绘。
本发明所述的滑动开关按钮的实现方法,通过自定义switch开关按钮(switch控件),实现滑动开关按钮,不同版本、不同机型具有一样的美化效果,可按需增加移动动画效果,减少了状态突变的突兀感,增加用户的体验。
附图说明
本发明有如下附图:
图1本发明的流程图。
具体实施方式
以下结合附图对本发明作进一步详细说明。
如图1所示,本发明所述的滑动开关按钮的实现方法,包括如下步骤:
步骤1,定义滑动开关按钮类slideswitch,继承android系统提供的view;
步骤2,定义监听及回调接口onswitchchangedlistener,用于提供状态的监听和回调;
步骤3,定义必要参数,用于设定滑动开关按钮相关的基础信息;
步骤4,定义画笔变量mpaint,是android系统的paint类型的变量,用于绘制;
步骤5,定义变量monswitchchangedlistener,是自定义的接口,用于对外部调用时的状态回传;
步骤6,初始化位图,计算背景图片的宽和高;
位图通过android系统提供用于获取resources对象的getresources方法获得;
默认位图为做好的图片资源r.drawable.bg_switch_off、r.drawable.bg_switch_on及r.drawable.switch_thumb;
通过android系统bitmap对象的getwidth和getheight方法获取图片的宽和高;
步骤7,设定setonswitchchangedlistener方法,传过来接口对象用来监听状态的变化,
设定setstatus方法,用于改变控件当前的状态信息;
步骤8,重写ontouchevent方法,监听用户按下、移动、抬起的事件,和滑动动画处理;
步骤9,重写ondraw方法根据不同的状态绘制背景图和文字提示信息。
在上述技术方案的基础上,步骤3中,所述必要参数包括:
用于代表当前控件的状态的常量参数,包括:
switch_off,控件关闭,是android系统的int类型,
switch_on,控件开启,是android系统的int类型,
switch_scroling,控件滑动,是android系统的int类型;
定义变量mswitchstatus,是android系统的int类型的变量,用于标记控件当前的状态;
定义字符串变量montext和mofftext,都是android系统的string类型的变量,用于提示空间当前的状态;
定义布尔类型变量mhasscrolled,默认值false,是android系统的boolean类型的变量,用于标记是否发生滚动;
定义变量msrcx和mdstx,都是android系统的int类型的变量,用于标记中间圆形的起始x坐标和结束x坐标;
定义变量mswitch_off、mswitch_on和mswitch_thumb,都是android系统的bitmap类型的变量,用于加载不同状态时的背景图片;
定义变量mbmpwidth、mbmpheight和mthumbwidth,都是android系统的int类型的变量,用于计算背景图片的宽和高和中间图片的宽。
在上述技术方案的基础上,步骤3中,所述必要参数进一步包括:
不同状态的文字提示,包括:ontext和offtext,是android系统提供的string类型的变量。
在上述技术方案的基础上,步骤8中,通过android系统提供的事件对象event,解析出事件的类型和当前的x,y坐标信息,
例如:通过event.getx()获取x的坐标值;
当检测到用户移动时,调用系统view控件提供的invalidate方法用于对当前控件进行重绘。
在上述技术方案的基础上,步骤9中,根据android系统提供的画布对象canvas,通过android系统paint对象的settextsize方法设置画笔的字体大小,以适配画布;
通过自定义方法drawbitmap统一绘制图片,
在绘制过程前,通过android系统提供的paint里对象的setcolor方法设置画笔的颜色,
在绘制过程中,通过android系统canvas对象的drawbitmap方法绘制bitmap,所述bitmap是要绘制的目标位图对象,
在绘制过程中,通过canvas对象的drawtext方法在画布上绘制文字提示信息,
在绘制过程中,通过cliprect方法对画布进行裁剪,只显示裁剪后的部分,通过android系统canvas对象里的translate方法对画布进行平移,
在绘制过程中,通过canvas对象里的restoretocount方法对当前画笔信息进行保存。
在上述技术方案的基础上,步骤9中,进一步通过android系统paint对象的settypeface方法设置字体的类型。
在上述技术方案的基础上,步骤9中,进一步定义animationtransrunnable类实现android系统提供runnable接口,用于实现移动的动画效果。
在上述技术方案的基础上,实现移动的动画效果时,通过参数srcx代表中间小圆形起始的x坐标的位置,通过参数dstx代表中间小圆形要移动到的x坐标的位置,通过参数duration代表动画执行的时间,通过android系统自定义view内提供的postinvalidate方法对控件进行重绘。
例如:实现移动的动画效果代码如下:
publicvoidrun()
{
finalintpatch=(dstx>srcx5:-5);
if(duration==0)
{
slideswitch.this.mswitchstatus=switch_scroling;
slideswitch.this.postinvalidate();
}
else
{
intx=srcx+patch;
while(math.abs(x-dstx)>5)
{
mdstx=x;
slideswitch.this.mswitchstatus=switch_scroling;
slideswitch.this.postinvalidate();
x+=patch;
try
{
thread.sleep(10);
}
catch(interruptedexceptione)
{
e.printstacktrace();
}
}
mdstx=dstx;
slideswitch.this.mswitchstatus=mdstx>35switch_on:switch_off;
slideswitch.this.postinvalidate();
}
}
本说明书中未作详细描述的内容属于本领域专业技术人员公知的现有技术。