android .9图片在代码中的设置,Android点九图总结以及在聊天气泡中的使用

本文深入探讨了Android中点九图(.9.png)的原理,包括其出现原因、本质、创建方法及基本使用。重点讲述了在聊天气泡中使用点九图可能遇到的问题,如黑线显示、拉伸失效等,并提供了详细的解决方案,包括图片处理流程和注意事项。此外,还分析了点九图在编译时的转换过程以及如何在客户端处理网络获取的点九图。
摘要由CSDN通过智能技术生成

编辑推荐:

本文来自于腾讯云,介绍了点九图的本质,聊天气泡中使用点九图,其它问题等。

1. 点九图介绍

这一块是对点九图的简单介绍,如果对这块已经有了解的话,可以直接跳到2,看看聊天气泡中如何使用点九图。

1.1 点九图出现的原因

首先简单介绍下点九图出现的原因吧,Android为了使用同一张图作为不同数量文字的背景,设计了一种可以指定区域拉伸的图片格式“.9.png”,这种图片格式就是点九图。

注意:这种图片格式只能被使用于Android开发。在ios开发中,可以在代码中指定某个点进行拉伸,而在Android中不行,所以在Android中想要达到这个效果,只能使用点九图。(对大多数时候来说是这样,实际上可以自己构造,后面会稍微提一下,见3.2)

1.2 点九图的本质

点九图的本质实际上是在图片的四周各增加了1px的像素,并使用纯黑(#FF000000)的线进行标记,其它的与原图没有任何区别。可以参考以下图片:

c9c7e92066b4db597f8125c96dce087b.png

可以看到在该图的四周,均有黑色像素标记,这些标记的作用分别是:

177d9449bfed1ea34420fc7e3221bc5b.png

1.3 创建点九图的几个方法

由于点九图的本质也是个图片,只是在周围加了1px的像素,所以你可以使用ps或其它任意支持像素操作的p图工具来将一个普通图片转换为点九图,但是就易用性和可视性来看,推荐使用Draw9patch工具,该工具存在于早期的Android

SDK中,如今被集成到了Android studio中,它实际上也是在图片边缘画线,但是在工具中只能在边缘画,且只能画黑线,这样便减少了误操作的可能性。并且在Draw9patch中可以预览结果。

注意:图片四个角的像素点不要画上黑线,否则Android无法识别。

de4ad8a3afd7ca63f5b934499fd589eb.png

具体如何操作,这里就不多赘述了。

1.4 Android 点九图的基本使用

Android中使用点九图,主要有三种形式,使用res文件夹中的点九图,使用assets文件夹中的点九图以及使用网上拉取的点九图,下面分别看看它们如何使用。

1.使用res文件夹中的点九图比较简单,直接将带黑线的点九图放到res文件夹中,就可以按照正常使用res的方法使用了。一般为设置为TextView的背景,便可以根据TextView的内容大小进行拉伸了。

2.使用assets文件夹中的点九图稍微复杂一些,这里不能直接放入带黑线的点九图,而是放入一种转换后的点九图,然后在使用时,再由开发主动构造成NinePatchDrawable然后使用。(是不是看不懂,往后看就对了。)

3.使用网上拉取的点九图就更复杂了,本篇文章大部分都在讲这一块,有兴趣的就请往下看~。

1.5 Android点九图的解析原理

Android并不是直接使用点九图,而是在编译时将其转换为另外一种格式(见3.1),这种格式是将其四周的黑色像素保存至Bitmap类中的一个名为mNinePatchChunk的byte[]中,并抹除掉四周的这一个像素的宽度;接着在使用时,如果Bitmap的这个mNinePatchChunk不为空,且为9patch

chunk(见3.3),则将其构造为NinePatchDrawable,否则将会被构造为BitmapDrawable,最终设置给view,NinePatchDrawable的拉伸主要是通过其draw方法实现的。总而言之,最后打出的包中的点九图,已经不是原来的带黑线的点九图了。

2. 聊天气泡中使用点九图

2.1 遇到的问题和解决方案

先简单说下从网上拉取点九图的过程,首先使用url请求网络数据,并将结果缓存为本地文件,再使用文件流创建Bitmap,接着使用Bitmap创建drawable再交给view使用,最后由view的draw方法调用drawable的draw方法将图片绘制出来。

再看看上面1.5的解析原理,它会带来一个坑,由于聊天气泡需求需要使用url从网络上拉取点九图,如果这个点九图没有经过编译的过程,将其周围的黑线标记放入到png中的一个辅助chunk中,那么在使用这个图作为背景时,会显示出黑线,且不会拉伸。而根据以往的经验,

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值