在Android开发应用中,默认的Button是由系统渲染和管理大小的。而我们看到的成功的移动应用,都是有着酷炫的外观和使用体验的。因此,我们在开发产品的时候,需要对默认按钮进行美化。在本篇里,笔者结合在应用开发中的经验,探讨一下自定义背景的按钮、自定义形状按钮的实现方法。

首先看实现效果截图:

自定义背景的按钮目前有2种方式实现,矢量和位图。

1. 矢量图形绘制的方式

矢量图形绘制的方式实现简单,适合对于按钮形状和图案要求不高的场合。步骤如下:

(a) 使用xml定义一个圆角矩形,外围轮廓线实线、内填充渐变色,xml代码如下。

//bg_alibuybutton_default.xml<?xml version="1.0" encoding="utf-8"?>

同样定义bg_alibuybutton_pressed.xml和bg_alibuybutton_selected.xml,内容相同,就是渐变颜色不同,用于按钮按下后的背景变化效果。

(b) 定义按钮按下后的效果变化描述文件drawable/bg_alibuybutton.xml,代码如下。

(c) 在你需要的界面定义文件中,如layout/main.xml中定义一个Button控件。

这样,自定义背景的按钮就可以使用了,在实现onClick方法后就可以响应操作。

2. 9-patch图片背景方式

此种方法相对复杂繁琐,但可以制作出更多、更复杂样式的按钮图样。

什么是9-patch格式呢?

9-patch格式,是在Android中特有的一种PNG图片格式,以"***.9.png"结尾。此种格式的图片定义了可以伸缩拉伸的区域和文字显示区域,这样,就可以在Android开发中对非矢量图进行拉伸而仍然保持美观。如果使用位图而没有经过9-patch处理的话,效果就会想第一张截图中的“普通图片背景按钮”那样被无情的拉伸,影响效果。Android中大量用了这种技术,默认的按钮的背景就是用了类似的方法实现的。我们看一下google官方的描述:

该格式相对于一般PNG图片来说,多了上下左右各一条1px的黑线。左、上黑线隔开了9个格子,当中一个格子(见上图Strechable Area区域)声明为可以进行拉伸。右、下两条黑线所定义的Paddingbox区域是在该图片当做背景时,能够在图片上填写文字的区域。每条黑线都是可以不连续的,这样就可以定义出很多自动拉伸的规格。Android sdk中提供了设置的工具,启动命令位于:$ANDROID_SDK/tools/draw9patch.bat,使用它对于原始PNG进行设置9-patch格式,非常方便,如下图。

draw9patch工具的右侧是能够看到各方向拉伸后的效果图,你所要做的就是在图上最外侧一圈1px宽的像素上涂黑线。

注意,在draw9patch.bat第一次运行时,sdk2.2版本上会报错:java.lang.NoClassDefFoundError:org/jdesktop/swingworker/SwingWorker。需要下载swing-worker-1.1.jar ,放入$android_sdk/tools/lib路径下,成功运行。

此种方法实现的步骤如下。

(a) 使用draw9patch.bat作完图片后,得到两张按钮背景,分别是正常和按下状态下的,命名为bg_btn.9.png和bg_btn_2.9.png。

(b) 编写图片使用描述文件bg_9patchbutton.xml。

// in bg_9patchbutton.xml<?xml version="1.0" encoding="UTF-8"?>

(c) 在界面定义文件 layout/main.xml中添加Button、ImageButton按钮控件的定义。Button、ImageButton都是可以使用背景属性的。

以上2种实现按钮的美化,都是标准的矩形按钮为基础。在一些应用中我们可以看到漂亮的自定义形状的异形按钮,这是怎么实现的呢?经过一番研究和实践,找出了一种方便的方法,就是使用ImageButton加上9-patch就可以实现漂亮的自动延伸效果。

3. 自定义形状、颜色、图样的按钮的实现

步骤如下。

(a) 设计一张自定义形状风格背景的图片,如下图。

(b) 未点击和按下后的状态各做一张,形成一套图片,如下图。

forward.png

forward2.png

(c) 创建和编写按钮不同状态的图片使用描述文件drawable/ib_forward.xml

// ib_forward.xml<?xml version="1.0" encoding="UTF-8"?>

(d) 在界面定义文件 layout/main.xml中添加ImageButton按钮控件的定义。

// in layout/main.xml

java 自定义形状按钮_制作自定义背景Button按钮、自定义形状Button的全攻略相关推荐

  1. java火柴人战争_《火柴人战争:遗产》兵种阵容搭配攻略

    在火柴人战争遗产手游中玩家将亲临激烈刺激的战场,指挥你的火柴人勇士进行作战,而且游戏中有着各种火柴人士兵可供训练,玩家需要一边需要组建自己的火柴人战队,同时还必须指导他们参加战争,那在游戏中兵种怎么选 ...

  2. 情怀java手机网游_情怀的游戏名字 | 手游网游页游攻略大全

    发布时间:2015-10-12 cf官方论坛推出了一个全新的活动.又是让你晒名字说理由的.不过赠送奖励还不错.来看看99单机小编熊卜卜的CF晒出你的游戏名字说出其中的缘由拿游戏道具活动哈. 有些人的名 ...

  3. java 黑白皇后算法_不思议迷宫黑白皇后怎么打 黑白皇后攻略

    不思议迷宫黑白皇后怎么打?黑白皇后是主教的阴谋副本的最终章,玩家可以在副本中获得黑白皇后冈布奥.今天小编就为大家带来了不思议迷宫黑白皇后攻略,帮助大家轻松通关,小伙伴们不要错过哦! 不思议迷宫黑白皇后 ...

  4. java 黑白皇后算法_不思议迷宫黑白皇后3分钟速刷攻略 平民速刷黑白皇后冈布奥/称号推荐...

    不思议迷宫国服v0.6.170113.05-0.0.22 手机版 类型:休闲益智大小:94KB语言:中文 评分:10.0 标签: 立即下载 不思议迷宫黑白皇后3分钟速刷攻略,平民速刷黑白皇后冈布奥/称 ...

  5. 准备创建独立站?2022年最新制作企业官网必看的网页设计全攻略

    不管你选择自行架设或是委托给网页设计公司,网站架设从主机伺服器.网域名称.网页版面设计.网站视觉呈现,再到后续网站经营的追踪工具.行销推广策略,当中有大量的选择仍需要你自行决定,就算是网页设计公司也只 ...

  6. 苹果电子邮件怎么注册_忘记了Apple ID账号密码怎么办?超全攻略,帮你解决问题...

    第一种:若只是忘记了Apple ID账号的话,可以通过几种方法来查看 ①第一种就是通过"账号与密码"还原方法 当然,使用这个方法,就要你存储过账号密码了. ②iOS10.2以上版本 ...

  7. 小度机器人小胖机器人_小度机器人怎么升级?智能机器人百小度快速升级全攻略[多图]...

    类型: 大小: 评分: 平台: 标签: 百小度机器人怎么升级?该如何操作呢?估计很多用户还不太了解,没关系,下面是友情下载小麦整理出来的智能机器人百小度升级全攻略,希望可以帮到大家,希望就跟随小麦一起 ...

  8. 仙之侠道2玖章各个任务详情_《仙之侠道Ⅱ柒章》任务全攻略 新手必看

    [誓约]这个是六章新增的武学任务,只有未婚女士可以做.结了婚就放弃吧. 任务流程是: 1.去练功房左边NPC云仙姑接任务.(在五章以前的停怪处) 2.去仙界找剑痕之殇.(上了天界就可以看见)剑大侠因为 ...

  9. java数据库的量级_百度万亿量级数据库Tera架构应用、设计与实践全攻略

    信息技术发展突飞猛进,网络数据呈现爆炸之势,搜索引擎的实时性面临巨大挑战.百度搜索引擎每天处理着数万亿次的链接分析和数百亿次的互联网资源采集.作为百度搜索引擎的核心数据库Tera,是如何支撑万亿量级的 ...

  10. 用C#制作PDF文件全攻略(转)

    PDF文件是目前比较流行的电子文档格式,在办公自动化(OA)等软件的开发中,经常要用到该格式,但介绍如何制作PDF格式文件的资料非常少,在网上搜来搜去,都转贴的是同一段"暴力"破解 ...

最新文章

  1. K:java中的序列化与反序列化
  2. 如何用java语法解析接口返回的json串?
  3. mac下MongoDB数据库安装
  4. 今晚直播 | 清华大学​高天宇:对比学习及其在NLP中的应用
  5. RabbitMQ—性能测试
  6. android资源透明背景,@谷歌android帝 这是你想要的,全局透明背景教程,两种方法...
  7. Vue中基于Vuex使用echarts组件动态数据绑定的方法
  8. 移动老总上厕所!!!让你爽歪歪!!
  9. GCD使用经验与技巧浅谈
  10. 华为HCIA认证考试题库数量有多少?HCIA备考时间多久合适?
  11. 行业软件之PTV微观软件VISSIM4.3 5.0 5.1 5.2 5.3 5.4下载和相关资料
  12. 计算机故障升温降温法,电脑故障排除1000例
  13. wsus微软补丁升级服务器不能下发,WSUS配置微软升级服务器操作.doc
  14. 怎么查看html隐藏代码,隐藏HTML源代码 怎样查看网页中隐藏的html源码
  15. Kubernetes网络插件(CNI)超过10Gbit/s网络的基准结果
  16. 【附源码】计算机毕业设计java学科竞赛管理设计与实现
  17. 【漏洞】——心脏滴血(CVE-2014-0160)
  18. win10蓝牙故障无法正常使用的有效解决方法
  19. 如何写好一篇论文——闵老师《论文写作》心得
  20. Echarts动态地图实现

热门文章

  1. 关键时刻卡成狗,测网速要成上网必备动作了?
  2. “好师父”如何破解大学生就业难题
  3. 微软水下数据中心“浮出水面”、GitHub代码保存在北极,数据黑科技贮藏方式大曝光!...
  4. ofo 被爆仍在自动续费;苹果加紧培养新一代接班人;谷歌推出 Android 11 Go | 极客头条...
  5. 一年翻 3 倍,装机量 6 亿台的物联网操作系统又放大招!
  6. 优酷爱奇艺回应被处罚;拼多多主体公司法定代表人变更,黄峥退出董事席位;斗鱼发布开源框架Jupiter | 极客头条
  7. 为什么需要 Redis 哨兵?
  8. 漫画:趣解鸿蒙 OS 如何实现跨平台?
  9. Google Cloud大规模宕机;中国正式进入 5G 商用元年!苹果发布SwiftUI |开发者周刊...
  10. 程序员的代码为什么永远写不完?