本发明涉及Android应用的技术领域,特别涉及一种基于Android系统对UI控件进行轮廓剪裁及美化的方法。

背景技术:

目前,随着智能电视的普及,Android应用层出不穷,而那些表现形式单一、传统的UI显示界面将不再满足人们日益挑剔的眼光。Android系统对原生的UI控件的展现方式大多是生硬的矩形,这种单一的展示风格,让用户审美疲劳。而目前比较广泛的轮廓裁剪方法,是做画布裁剪或者整体遮罩,前者对于曲线裁剪,会有无法消除的严重锯齿,而后者相对来说,不够通用而且会明显增加程序运行负担。

技术实现要素:

本发明的目的是克服上述背景技术中不足,提供一种基于Android系统对UI控件进行轮廓剪裁及美化的方法,能够在尽量少的影响UI运行效率的情况下,不改变原有界面刷新流程,用尽量少的代码和资源来实现控件轮廓剪裁效果美化,具有简单、高效的特点。

为了达到上述的技术效果,本发明采取以下技术方案:

一种基于Android系统对UI控件进行轮廓剪裁及美化的方法,包含以下步骤:

A.预设剪裁角度,绘制遮罩图片,并将所述遮罩图片集成到apk中,或运行UI控件时实时画一个Bitmap对象作为遮罩图片,且将该遮罩图片定义为全局对象;

B.将所述遮罩图片放置于UI控件上需剪裁的位置,根据其他需剪裁的位置或及剪裁形状,重绘新的遮罩图片或平移、旋转所述遮罩图片使其成为新的遮罩图片,并将新的遮罩图片置于UI控件上需剪裁的对应位置;

C.在UI控件上需剪裁的位置均放置好遮罩图片后,对UI控件进行轮廓剪裁,重合部分进行下层图片显示,并忽略遮罩图片,进行图像重绘。

进一步地,所述步骤B具体包含:

B1.在UI控件的控件构造函数中,更改控件的默认参数,让系统渲染流程回调onDraw,其中,系统流程回调onDraw,onDraw中会自动回调dispatchDraw方法;

具体为:在控件构造函数中,更改控件的默认参数:

setWillNotDraw(false);//对于自定义控件,让系统渲染流程必然回调onDraw;

setLayerType(View.LAYER_TYPE_HARDWARE,null);//对于非特定画布操作的控件,可以用这个代替,使用硬件加速,同时能解决渲染前的默认黑底和渲染时的闪烁问题;

其中,系统流程回调onDraw,onDraw中会自动回调dispatchDraw方法;

B2.重写dispatchDraw方法,在dispatchDraw方法中,获取到遮罩图片并将遮罩图片放置于对应的UI控件上需剪裁的位置。

进一步地,还包含步骤D:

D.在控件构造函数中添加:paint.setAntiAlias(true),控件剪裁后,消除边缘锯齿,图像边缘清晰。

本发明与现有技术相比,具有以下的有益效果:

本发明的一种基于Android系统对UI控件进行轮廓剪裁及美化的方法,能够在尽量少的影响UI运行效率的情况下,不改变原有界面刷新流程,用尽量少的代码和资源来实现控件轮廓剪裁效果美化,具有简单、高效的特点;

且通过该方法对UI控件进行轮廓剪裁效果美化,对应用内存占用和运行效率没有明显的影响,控件布局整体一次成型,不影响原有代码框架和实现方式,且可实现任意类型自定义控件任意形状的轮廓剪裁,让Android应用的UI界面展示不再单一,使用户能体验多元化的UI风格,带来视觉上的一致享受。

附图说明

图1是使用本发明的一种基于Android系统对UI控件进行轮廓剪裁及美化的方法进行UI控件轮廓剪裁的示意图。

具体实施方式

下面结合本发明的实施例对本发明作进一步的阐述和说明。

实施例:

本发明的一种基于Android系统对UI控件进行轮廓剪裁及美化的方法可用于对UI控件进行轮廓剪裁,可以是任意类型的UI控件进行任意形状的轮廓剪裁,达到UI效果美化的作用。本实施例中以直角矩形ImageView剪裁为圆角矩形ImageView为例,对本发明的技术方案进行说明。

Android的UI控件默认都是矩形的,因此本实施例将以矩形图片剪裁为圆角矩形为例,对本发明的整个过程进行说明,其中,白色的矩形图片为原始图片,黑色的圆角图片为遮罩图片。

首先介绍剪裁圆角矩形的实现原理:为保证实现的效果质量(无锯齿),我们利用Android系统的图层混合遮罩绘制机制,并为使资源效果尽量小,我们采用局部小范围遮罩,一次绘制多处的方法,实现圆角矩形的剪裁。而对于任意自定义控件,我们只需要在其每次刷新时,同时绘制一遍遮罩,即可达到永久的剪裁效果。

UI控件默认都是矩形的,裁剪成圆角时,依据预设的圆角弧度,仅重绘四个角的正方形区域即可。本实施例中,选用制作一张非常小的圆角遮罩图片(圆弧半径为边长的正方形,内绘一个四分之一圆,圆内有色彩填充,圆外像素全透明),然后将在程序初始化时加载为全局对象,以减小内存占用,并在需要做圆角裁剪的控件中,覆写渲染回调函数,在其中将圆角小遮罩图片绘制到控件画布的四个角上,就完成了此控件的圆角剪裁。

如图1所示,本实施例的基于Android系统对UI控件进行轮廓剪裁及美化的方法,其具体包含以下步骤:

第一步:将左上角的遮罩图片集成到apk中,或运行时实时画一个Bitmap对象作为遮罩图片,且将该遮罩图片定义为全局对象。

第二步:在控件构造函数中,更改控件的默认参数:

setWillNotDraw(false);//对于自定义控件,让系统渲染流程必然回调onDraw;

setLayerType(View.LAYER_TYPE_HARDWARE,null);//对于非特定画布操作的控件,可以用这个代替,使用硬件加速,同时能解决渲染前的默认黑底和渲染时的闪烁问题;

其中,系统流程回调onDraw,onDraw中会自动回调dispatchDraw方法。

第三步:重写dispatchDraw方法,在dispatchDraw方法中,获取到遮罩图片;

首先,将左上角的遮罩图片放到矩形的左上角位置上:具体在控件构造函数中做如下设置:

matrix.reset();

canvas.drawBitmap(mask,matrix,paint);

然后,将该遮罩图片顺时针旋转90°后放到矩形右上角位置上,具体在控件构造函数中做如下设置:

matrix.reset();

matrix.postRotate(90);

matrix.postTranslate(canvas.getWidth(),0);

canvas.drawBitmap(mask,matrix,paint);

然后,将该遮罩图片顺时针旋转180°后,放到矩形右下角位置上,具体在控件构造函数中做如下设置:

matrix.reset();

matrix.postRotate(180);

matrix.postTranslate(canvas.getWidth(),canvas.getHeight());

canvas.drawBitmap(mask,matrix,paint);

最后,将该遮罩图片顺时针旋转270°后,放到矩形左下角位置上,具体在控件构造函数中做如下设置:

matrix.reset();

matrix.postRotate(270);

matrix.postTranslate(0,canvas.getHeight());

canvas.drawBitmap(mask,matrix,paint);

其中,dispatchDraw(Canvas canvas)方法是Android系统在刷新渲染一个UI控件时,必被调用的一个方法。

Android中的Matrix是一个3*3的矩阵,Matrix对图像的处理有四种基本变换,其中,本实施例中用到的postRotate是旋转变化,postTranslate是平移变换。

Canvas是Android的一个对象,相当于一个画布(在在本实施例中是指矩形图片),canvas.getWidth()与canvas.getHeight()的作用是获取当前画布的宽和高。将遮罩图片水平或垂直移动画布的宽度或高度,即可将遮罩图片放置到矩形的四个角上。

第四步,在控件构造函数中添加如下设置:

mDuffXfermode=new PorterDuffXfermode(Mode.DST_IN);

paint.setXfermode(mDuffXfermode);

其中,Android中的Paint相当于一只画笔,Mode.DST_IN即:显示原始图片的与遮罩图片重合部分,在本实施例中即取下层图片,忽略遮罩图片。

第五步,进行效果美化,制作出需求的UI控件形状:

在控件构造函数中添加:paint.setAntiAlias(true);

其中,paint.setAntiAlias(true);使控件剪裁后,消除边缘锯齿,图像边缘清晰。

由上可知,本发明的基于Android系统对UI控件进行轮廓剪裁及美化的方法,可对任意类型的UI控件进行任意形状的轮廓剪裁,并达到UI效果美化的作用,其利用旋转、平移等手段对遮罩图片进行处理,并只进行一次渲染多处局部小区域,大大降低美化效果带来的内存增长及运行效率损失,使得Android应用的UI界面展示不再单一,使用户能体验多元化的UI风格,有利于提升用户的使用感和满意度。

可以理解的是,以上实施方式仅仅是为了说明本发明的原理而采用的示例性实施方式,然而本发明并不局限于此。对于本领域内的普通技术人员而言,在不脱离本发明的精神和实质的情况下,可以做出各种变型和改进,这些变型和改进也视为本发明的保护范围。

android 画布裁剪,一种基于Android系统对UI控件进行轮廓剪裁及美化的方法与流程...相关推荐

  1. 在android添加数据采集,一种基于Android系统的地理信息数据采集方法与流程

    本方法属于采集地理信息数据的发明,是一种基于android操作系统和gis地理信息系统进行户外地理信息数据采集的方法. 背景技术: 众所周知地理信息数据采集在很多行业中都有应用,比如说农业中的土地普查 ...

  2. android 订餐系统,一种基于Android平台手机订餐系统的实现方法

    一种基于Android平台手机订餐系统的实现方法[ 技术领域: ][0001]本发明涉及一种手机订餐系统,能够通过手机上的Android软件实现订餐.[ 背景技术: ][0002]目前已有的网上订餐系 ...

  3. android蓝牙传输脉冲,一种基于Android操作系统的激光测距仪蓝牙通信方法与流程...

    本发明属于无线通信技术领域,涉及Android操作系统的应用,具体涉及一种基于Android操作系统的激光测距仪蓝牙通信方法. 背景技术: 目前,随着智能设备的普及,智能操作系统得到了极大的发展,An ...

  4. linux网卡握手速率模式,一种基于Linux平台下的网卡速率和双工模式测试的方法与流程...

    本发明涉及计算机技术领域,更具体的说是涉及一种基于Linux平台下的网卡速率和双工模式测试的方法. 背景技术: 随着社会经济的发展和互联网技术的进步,如今把计算机网络使得我们的生活变得更加方便,快捷. ...

  5. java监听微信_一种基于java后台应用监控微信小程序的用户访问量的方法与流程...

    本发明涉及java应用与微信小程序应用开发技术领域,具体涉及一种基于java后台应用监控微信小程序的用户访问量的方法. 背景技术: 微信小程序,简称小程序,是一种不需要下载安装即可使用的应用,它实现了 ...

  6. Matlab应变片仿真,一种基于Matlab/Adams联合仿真的真实路谱再现系统和方法与流程...

    本发明属于汽车系统动力学仿真技术领域,特别是一种基于Matlab/Adams联合仿真的真实路谱再现系统和方法. 背景技术: 汽车系统动力学仿真技术是汽车设计制造中一项不可或缺的技术,尤其是在汽车操纵稳 ...

  7. 掌纹与掌静脉融合matlab代码,一种基于人脸和掌纹掌静脉识别的身份比对方法与流程...

    本发明涉及生物识别技术领域,具体为一种基于人脸和掌纹掌静脉识别的身份比对方法. 背景技术: 生物特征是指人体所固有的生理特征或行为特征,生理特征包括指纹.人脸.虹膜.掌静脉等,行为特征有声纹.步态以及 ...

  8. 测向交叉定位matlab,一种基于角度信息的无源多站多目标测向交叉定位方法与流程...

    本发明属于电子对抗技术领域,具体的说是涉及一种基于角度信息的无源多站多目标测向交叉定位方法. 背景技术: 在电子侦察过程中,准确估计目标辐射源位置有助于获取辐射源信息,是做好高层次上的态势估计和威胁估 ...

  9. 百度ai文字转语音并下载php源码,一种基于百度AI的网页版在线语音包转文字的方法与流程...

    本发明涉及语音识别技术领域,特别涉及一种基于百度AI的网页版在线语音包转文字的方法. 背景技术: 语音识别技术,也被称为自动语音识别Automatic Speech Recognit1n, (ASR) ...

最新文章

  1. AI 医疗公司“战疫”在前线
  2. Java报错:java.math.BigDecimal cannot be cast to java.lang.String
  3. HTML5新特性介绍
  4. mysql极客_极客mysql16
  5. java 产生无重复的随机数,Java创建无重复的随机数
  6. JAVA线程并发数量控制_Java并发工具类(三):控制并发线程数的Semaphore
  7. 计算机三级嵌入式系统之常考指令
  8. 起点文学网ViewState解码分析后的结果研究
  9. Vue3学习之第一节:初识setup
  10. 如何用python裁剪图片
  11. 关于JSP文件的运行方法
  12. 云栖大会压轴好戏 阿里云发布视频云V5计划与系列新产品
  13. 规划Autovue的安装
  14. 对话 IJCAI 07「卓越研究奖」得主 Alan Bundy :理解智能的本质是 AI 发展的终极目标
  15. windows系统通过虚拟机安装linux
  16. 【WPS配置mathtype】
  17. PS2251-61/91固件升级工具20130410-SP
  18. 搜狗 2012 校园招聘 网测题
  19. java练手项目 --- 校园兼职平台
  20. 光影在线webapp开发教程2 vue-cli集成mui

热门文章

  1. metadata request forward to GM6 - X-DevTools-Emulate-Network-Conditions-Cli
  2. 使用report CFD_CREATE_FIELD创建extension field
  3. WordPress设置页面的加载机制
  4. 如何解决创建Account时的error message BP category 2 does not fit the data in category 1
  5. 如何使用SAP Gigya的登录服务和您的网站集成
  6. SAP UI5框架绘制footer区域的入口调试
  7. 前端打包利器webpack里utils.cssLoaders的工作原理调试
  8. SAP CRM和Cloud for Customer里客户主数据的层级维护
  9. MongoDB最简单的入门教程之一 环境搭建
  10. 5分钟部署一个Hello World Servlet到CloudFoundry