非典型的NinePatch运用模式
非典型的NinePatch使用模式Android程序员对NinePatch文件一定很熟悉,因为它的应用实在是太广泛了,当图像需
非典型的NinePatch使用模式
Android程序员对NinePatch文件一定很熟悉,因为它的应用实在是太广泛了,当图像需要拉伸或收缩时,一定会首先考虑到它,而由于Android设备那五花八门的分辨率,图像的拉伸收缩几乎是不可避免的....
Google已经为我们安排好了一个简单有效的NinePatch使用模式:
创建图像文件使用sdk/tools/draw9patch工具,选择图像的拉伸收缩区域,以及内容显示区域(可选)将draw9patch生成的*.9.png文件复制到res/drawable目录中在UI文件或者程序代码中,直接使用文件对应的Drawable
通常情况下,这种模式工作得很好,但有时候,我们还想要更多....比如,我们的图像来源于互联网,而不是编译到App中固定的图像那就要我们自己创建新的应用模式了:
(同上)创建图像文件(同上)使用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);
关于上面的步骤3:编译*.9.png文件,我还没有找到更简单的方法,目前的方法是,先创建一个傀儡App,将需要编译的9.png放入这个App并生成APK,再unzip这个APK文件并从res/drawable目录下取出编译后的*.9.png文件。另外,也有人做了命令行工具abrc可以编译*.9.png文件(http://forum.xda-developers.com/showthread.php?t=785012)