Android程序员对NinePatch文件一定很熟悉,因为它的应用实在是太广泛了,当图像需要拉伸或收缩时,一定会首先考虑到它,而由于Android设备那五花八门的分辨率,图像的拉伸收缩几乎是不可避免的....
Google已经为我们安排好了一个简单有效的NinePatch使用模式:
[list]
[*]创建图像文件
[*]使用sdk/tools/draw9patch工具,选择图像的拉伸收缩区域,以及内容显示区域(可选)
[*]将draw9patch生成的*.9.png文件复制到res/drawable目录中
[*]在UI文件或者程序代码中,直接使用文件对应的Drawable
[/list]
通常情况下,这种模式工作得很好,但有时候,我们还想要更多....比如,我们的图像来源于互联网,而不是编译到App中固定的图像
那就要我们自己创建新的应用模式了:
[list]
[*](同上)创建图像文件
[*](同上)使用sdk/tools/draw9patch工具,选择图像的拉伸收缩区域,以及内容显示区域(可选)
[*]将draw9patch生成的*.9.png编译为Android特有的格式(还是可正常显示的png文件,但是将draw9patch中生成的上下左右4条边裁掉了,相关信息生成chunk数据嵌入png文件中)
[*]使用BitmapFactory载入编译后的NinePatch图像文件,获得Bitmap对象bmp
[*]确认Bitmap是合法的NinePatch文件:NinePatch.isNinePatchChunk(bmp.getNinePatchChunk())
[*]生成NinePatchDrawable对象:new NinePatchDrawable(getResources(), bmp, chunk, new Rect(), null);
[/list]
关于上面的步骤3:编译*.9.png文件,我还没有找到更简单的方法,目前的方法是,先创建一个傀儡App,将需要编译的9.png放入这个App并生成APK,再unzip这个APK文件并从res/drawable目录下取出编译后的*.9.png文件。另外,也有人做了命令行工具abrc可以编译*.9.png文件([url]http://forum.xda-developers.com/showthread.php?t=785012[/url])
另外,如果图像定义了内容显示区(NinePatch图像的右下黑边),我们需要从chunk数据中解出其上下左右的padding数据,上面的步骤6需要修改一下才能在NinePatchDrawable中获得正确的padding rect,具体代码可参考这里:[url]http://stackoverflow.com/questions/11065996/ninepatchdrawable-does-not-get-padding-from-chunk[/url]
非典型的NinePatch使用模式
原创mb63e0703549da8 博主文章分类:android基础知识 ©著作权
©著作权归作者所有:来自51CTO博客作者mb63e0703549da8的原创作品,请联系作者获取转载授权,否则将追究法律责任
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
使用ansible部署lvs集群的NAT模式
ansible部署lvs集群NAT模式
lvs ansible -
非典型偏差eac公式 非典型性偏差
获得性偏差思维模型 ,即人们由于受大脑结构性缺陷或者认知的局限,在形成自己的判断过程中,往往会凭借 已获得的信息 作出判断,继而被已获得的信息所局限,结果导致 获得性偏差 。01、何谓获得性偏差思维模型 &n
非典型偏差eac公式 顶级思维模式 归零 运行方式 认知过程 -
pmp典型偏差非典型偏差 非典型偏差计算公式
根据惯导系统的极限对准精度公式,失准角误差为: phiE=-DnN/g; phiN=DnE/g; ph
pmp典型偏差非典型偏差 经验分享 方差 数据 加速度计