在Android UI设计开发中,我们经常会用到一些图标、图片来做背景等。

相信很多同学都会遇到一个问题,就是我们让美工做好一张图,一个图标,呃,看起来挺好看的,但是放进app中,扩大或缩小、在不同分辨率的手机中,显示出来的图片会变形、模糊。这可不是一个理想的界面。

或许,我们有一种办法,就是做多几张图片。开发Android的同学一定有看到项目里res目录下会有drawable-ldpi、drawable-mdpi、drawable-hdpi、drawable-xhdpi、drawable-xxhdpi这几个文件夹,而且每个文件夹里有会有一个相同的Android机器人的图标。那么,这几个文件夹究竟是干嘛用的呢?我们先来看一张图

ldpi对应的是320X240分辨率,

mdpi对应的是480X320分辨率,

。。。

即文件夹放的是对应分辨率的图片,手机中,android会根据当前分辨率了选择更适合的分辨率的图片,这样,我们知道了每种分辨率下图片的比例,就可以做多几张不同分辨率的图片,放在对应的文件夹下,这样或许可以避免图片变形。这并不是一个明智的选择,而且,在有些情况写这种方法也没有用。

比如聊天气泡等,它的大小长度是根据文字多少而定,难道你要先测试每增加一个文字长度会变多少然后做对应大小的背景图片?这不可能!

那怎么办呢?不用急,下面我就来教大家使用点9图解决这些问题。

首先,我们来了解一下什么是点9图?

点9图就是安卓系统或ios系统内的一种可拉抻而不失真的图,

点9图是把图中某些部分进行拉伸,而不想拉伸的部分,比如圆角等部分不做变化。

下面就我就以聊天气泡为例:

首先来看看一张做好的普通的气泡背景图及显示的效果图

上面那张是我做的气泡背景图,而下面两张分别是横向拉伸和纵向拉伸的效果,可以看出来,这种效果是非常糟糕的,并不是我们想要的,背景变形了,文字也没有在中间,虽然可以调边距使文字居中,但接下来我会教大家更好用的方法,也是用点9图。

现在来看看使用了点9图的背景的效果

很明显这样的拉伸就是我们要的效果了,四个角都不会变形,而且文字显示在中间。

下面来说说点9图的原理:

这是一张点9图,我分为1,2,3,4四个部分,其中1跟2部分表示拉伸的位置,3跟4部分表示内容显示部分

画图的时候根据自己需要画出四个黑边(一会教大家用工具),1、2的黑边的范围内会被拉伸,即之外的四个圆角跟突出来的三角形都不会变形。这样就能做到保持图片不变形的拉伸了。

下面就来做一张点9图,首先找到sdk的tools目录下的draw9patch.bat

双击打开

然后点击左上角的File导入最开始的那张图片

左边是带做图片,右边是效果预览图

那些黑边只需将鼠标在图片边缘位置往中间移便可做出来,至于那个点,我是习惯在可拉伸区域用鼠标点一下便可,当然随你喜欢可以拉长,就像上面的一张图一样。

点击这个show content复选框

便可在右边预览效果,灰色区域即内容显示区域,这样不用同过调边距使文字居中,方便了很多。

做好了之后,再点击左上角的File,点击Save 9-patch,保存为png图片,它会自动添加.9后缀,这个后缀不能删掉,删掉它就跟普通图片没区别了,(不对,应该说比普通图片多了四个黑边。)这样就完成了点9图的制作。

接下来在android中使用,跟普通图片,图标使用方法一样,虽然后缀多了.9,但是使用是不用加上.9。

比如:chatbackground.9.png,

在使用时只需android:background="@drawable/chatbackground"即可

下面分享开发中使用点9图的一些心得:

1、作为开发人员,了解一下点9图的实现原理,对UI开发有着很大的帮助,会让开发更加顺利。

比如:用点9图限制显示内容的区域,这样开发中我们就不必写更多的代码来使内容居中。

2、其实点9图并不只是这种切法,还有其他更复杂的切法,当然这是由图片的复杂度、实现的效果而定,

比如,一张图,我们要把显示的内容分成两半时,我们可以把一张图片分成两半(如下图),然后在代码中拼接起来,便可实现不错的效果,这种方法两张图的内容区域要一样大,拉伸区域范围也要一样,不然可能会造成两边不对称的效果

3、有了点9图,我们就可以尽可能地减小资源的大小,合理的切图方法可以减小图片资源,还有,有些纯色背景,我们不用做得那么大,用点9图拉伸即可,这样可为我们的安装包“瘦身”。

最后,我觉得点9图并不只是开发人员应该学的,美工更应该学,因为界面设计主要还是靠美工,不过设计时要与开发人员讨论讨论,看看各种切图效果及显示效果在android能否实现,是否复杂等,这样才能提高开发的效率。

以上是我开发中的一点经验,有不对的地方希望大家指正^_^。

Android点9图的运用的更多相关文章

  1. Android的切图标准

    最近总是有人在问我,Android怎么切图啊,怎么适配啊,不只是Android同行,还有很多新手ui设计师. 于是我就写篇文章,根据我们平时的开发经验,简单的介绍一下吧. 如果UI设计师以1920*1 ...

  2. android绘画折线图二

    紧接着android绘画折线图一,下面来介绍第二种方法,使用该方法,首先需要一个Androidplot-core-0.4.3-release.jar,该jar包之后也包含在项目源码中 建立一个andr ...

  3. android绘画折线图一

    最近需要实现用android来画折线图,所以百度了一下,发现确实很多,也很乱,现在整理两种方法(第二种方法在[android绘画折线图二]中实现),仅供大家参考,一起学习研究. 第一种使用ChartF ...

  4. Android之.9图的知识

    Android之.9图的知识 .9图的介绍 .9图也称为pPatch图,它是android app开发里一种特殊的图片形式,文件的扩展名为:.9.png. 9patch图片的作用就是在图片拉伸的时候保 ...

  5. Android实现带图标的ListView

    版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/bear_huangzhen/article/details/23991119 Android实现带图 ...

  6. 第一行代码 Android 思维导图

    第一行代码 Android  思维导图

  7. Android多媒体框架图

    Android多媒体整体架构图 MediaPlayer框架图 Camera框架图 SoundRecorder框架图 VideoCamera框架图 OpenCore与Skia ALSA Audio框架图 ...

  8. Android自定义折线图

    老师布置了个作业:http://www.cnblogs.com/qingxu/p/5316897.html 作业中提到的 “玩了几天以后,大家发现了一些很有意思的现象,比如黄金点在逐渐地往下移动.” ...

  9. 【UML】如何看Android的UML图

    UML图有很多类型,这里只讨论最重要也最常用的两种 - 类图和时序图. 1. 类图 通过类图,我们可以很容易的了解代码架构,理清模块之间的关系, 包括继承(Inheritance),实现(realiz ...

  10. 图解Android - 如何看Android的UML 图?

    如何看UML图? UML能给我们带来什么? 这是本文要寻找的答案.UML图有很多类型,我们这里只讨论最重要也最常用的两种 - 类图和时序图. 1. 类图 通过类图,我们可以很容易的了解代码架构,理清模 ...

随机推荐

  1. Hadoop Mapreduce 中的Partitioner

    Partitioner的作用的对Mapper产生的中间结果进行分片,以便将同一分组的数据交给同一个Reduce处理,Partitioner直接影响Reduce阶段的负载均衡. MapReduce提供了 ...

  2. 通过response对象的sendRedirect方法重定向网页

    通过response对象的sendRedirect方法重定向网页 制作人:全心全意 使用response对象提供的sendRedirect()方法可以将网页重定向到另一个页面.重定向操作支持将地址重定 ...

  3. 洛谷 2866 [USACO06NOV]糟糕的一天Bad Hair Day

    [题意概述] 给出一个长度为n的序列a,求有多少对[i,j]满足i<j且a[i]>max(a[i+1],a[i+2],...,a[j]). [题解] 单调栈. 倒着处理序列的元素,维护一个 ...

  4. Vue2.0如何自定义时间过滤器

    我们知道Vue2.0开始不再支持自带的过滤器,需要我们自己去自定义过滤器,方法如下:           我们可以自己定义一个时间过滤器,在此引用了一个日期处理类库(Moment.js)可以很快的实现 ...

  5. VMWare学习总结(1)——Centos7安装完毕后无法联网的解决方法

    在VmWare 上安装Centos7时,装好vmware后还是连不上网,通过查找资料原来是因为有线网卡没有激活,默认centos和redhat7都是不启用有线网卡的,要么手动开启,要么安装时直接启用! ...

  6. python写第一个网页

    1>安装django见别的博客http://djangobook.py3k.cn/2.0/chapter03/ 2>运行开发服务器 在命令提示符里进入目录mytest:cd: mytest ...

  7. 洛谷 P3203 BZOJ 2002 [Hnoi2010]Bounce 弹飞绵羊

    题目描述 某天,Lostmonkey发明了一种超级弹力装置,为了在他的绵羊朋友面前显摆,他邀请小绵羊一起玩个游戏.游戏一开始,Lostmonkey在地上沿着一条直线摆上n个装置,每个装置设定初始弹力系 ...

  8. 在Myeclipse中拷贝一个web项目,但是tomcat文件夹中没有更新,需要进行修改才能更新。

    1.在Myeclipse中拷贝一个web项目,但是tocat文件夹中没有更新,需要进行修改才能更新. 2.方法:右键这个工程,然后Properties->MyEclipse->Projec ...

  9. JVM即时编译(JIT)

    Java解释执行过程: 代码装入-代码校验-代码执行 Java字节码的执行方式分为两种:即使编译方式和解释执行方式.即时编译是值解释器先将字节码编译成机器码,然后执行该机器码.解释执行的方式是指解释器 ...

  10. Win32编程API 基础篇 -- 2.一个简单的窗口 根据英文教程翻译

    一个简单的窗口 例子:简单的窗口 有时人们在IRC提问,”我应该怎样制作一个窗口”...嗯,这恐怕不是完全这么简单好回答!其实这并不难一旦你明白你在做什么,但在你得到一个可展示的窗口之前还有一些事情需 ...