`
iaiai
  • 浏览: 2203692 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

非典型的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)
另外,如果图像定义了内容显示区(NinePatch图像的右下黑边),我们需要从chunk数据中解出其上下左右的padding数据,上面的步骤6需要修改一下才能在NinePatchDrawable中获得正确的padding rect,具体代码可参考这里:http://stackoverflow.com/questions/11065996/ninepatchdrawable-does-not-get-padding-from-chunk
分享到:
评论

相关推荐

    ninepatch-editor-1.25

    ninepatch-editor-1.25

    Android NinePatch jar

    Android NinePatch 技术

    NinePatchTest

    1. 加载NinePatch资源:使用`android.graphics.NinePatch`类加载NinePatch图,这个类可以解析额外的边框信息。 2. 设置NinePatch视图:在XML布局文件中,可以使用`android:background`属性为View设置NinePatch背景。...

    ninepatch:切片Android样式的9补丁图像,调整大小并进行交互式预览

    如果要使用交互式查看器,请阅读“交互式查看器”下的其他安装说明。 $ pip install ninepatch Python用法 from ninepatch import Ninepatch ninepatch = Ninepatch('ninepatch_bubble.9.png') print(ninepatch....

    RecyclerViewDecoration,一个公共工具类,用于RecyclerView的itemDecoration,支持Ninepatch映像。.zip

    在 RecyclerViewDecoration 中使用 Ninepatch 图片,开发者可以创建出动态适应屏幕大小的装饰元素,如分割线或背景,使应用界面更具专业感和统一性。 使用 RecyclerViewDecoration,你可以实现以下功能: 1. 添加...

    NinePatch图片制作从入门到精通

    2. 手动编辑:对于熟练的开发者,也可以使用像素编辑器(如Photoshop)手动在图片边缘添加黑色像素来创建NinePatch文件。但是这种方法需要较高的精确度,且容易出错。 三、NinePatch的优点 1. 适应性:NinePatch...

    安卓开发-android gif模式和图片展现模式 图片展现神器.zip.zip

    在安卓开发中,图片的展示方式对于用户...总结,Android开发中处理GIF和图片展现模式需要理解Android提供的原生支持和第三方库的使用。合理选择图片展现模式,结合性能优化策略,可以提升应用的视觉效果和运行效率。

    小程序 9妹工具(9Patch).rar

    免责声明:资料部分来源于合法的互联网渠道收集和整理,部分自己学习积累成果,供大家学习参考与交流。收取的费用仅用于收集和整理资料耗费时间的酬劳。 本人尊重原创作者或出版方,资料版权归原作者或出版方所有,...

    photoshop切图教程

    - 使用Photoshop进行初步切图,然后使用如Dreamweaver等网页编辑软件进行进一步的页面制作。通常需要重新制作或调整由Photoshop导出的HTML文件,以便添加动态内容或适应实际需求。 总的来说,Photoshop切图教程是...

    NinePatchDrawable读取非资源图片

    本篇将深入探讨如何在Android中使用NinePatchDrawable读取非资源路径的点9图片。 首先,让我们理解NinePatchDrawable的基本概念。一个点9图片(.9.png)是由普通的PNG图片和额外的像素边界组成,这些边界包含了拉伸...

    RecyclerViewDecoration:RecyclerView项装饰的通用工具类,支持ninepatch图像

    用于装饰RecyclerView的通用工具类,支持ninepatch图像。 文档在这里 您可以使用gradle或maven导入此lib,因为它存在于JCenter中。 lib中将显示更多可扩展的有用方法。 该库将合并到ExpandRecyclerView lib中。 ...

    phaser3-ninepatch-plugin:Phaser3的九个Patch插件!

    npm install @koreez/phaser3-ninepatch --save 用法 加载插件 您仍然需要在游戏中加载插件。 就像Phaser3中的任何其他全局插件一样,此操作也可以完成。 因此,要加载该插件,请将其包含在Phaser游戏配置中。 { ...

    android gif模式和图片展现模式 图片展现神器-IT计算机-毕业设计.zip

    - **Drawable**: Android中的图片资源类,可以表示多种类型的图像,如位图(Bitmap)、九宫格(NinePatch)等。开发者可以通过`setImageResource()`、`setImageBitmap()`等方法将Drawable对象设置到ImageView中。 ...

    点九图片素材制作工具Nine-Patch

    在Android开发中,点九图片的使用极大地提高了用户体验和应用的视觉质量。 Nine-Patch的制作通常需要专业的图像编辑软件,如Adobe Photoshop或Android Studio内置的Nine-Patch绘制工具。然而,对于不熟悉这些工具的...

    Swing9patch, 一组很酷的Java Swing可重用组件或UI效果。.zip

    5. **易用性**:通常,这些组件都提供了简单的API供开发者集成到自己的项目中,降低了学习和使用的门槛。 在Swing9patch-master文件夹中,你可能会找到以下内容: - 源代码:项目的Java源码,包括Swing组件的实现...

    9点素材制作工具Nine-Patch Editor1_0_0_3

    在Android应用开发中,使用9点切图有以下几个关键点: 1. **减少资源数量**:9点切图可以适应多种屏幕尺寸,避免了为每个分辨率创建单独的图片资源,简化了资源管理。 2. **保证显示质量**:通过正确设置拉伸区域,...

    9patch mac版 点9工具(安装包)

    但如果你在Mac上工作,可能需要使用第三方工具,如这个安装包提供的工具,因为默认的`draw9patch`工具是基于Java的,可能不支持所有macOS版本。 安装9patch mac版工具后,开发者可以打开PNG图像,然后使用工具的...

    Android应用源码BitmapFunc.zip

    4. **颜色模式转换**:Bitmap的inPreferredConfig参数可以设置颜色模式,如ARGB_8888(每个像素4字节),RGB_565(每个像素2字节),以平衡色彩质量和内存使用。 5. **位图池**:Android 3.0及更高版本引入了位图池...

    滑动条-各种样式的ProgressBar+源代码

    例如,你可以创建一个NinePatch图片来定义进度条的外观,或者使用Shape Drawable来创建具有渐变色、边框等效果的进度条。 五、动画效果 通过使用Animation或者ObjectAnimator,开发者可以为ProgressBar添加动画效果...

    自定义View—使用Xfermode实现圆角图片

    同时,考虑到性能优化,可以考虑在构造函数中使用BitmapShader或者NinePatch来避免每次绘制时的额外计算。 总之,通过使用Xfermode和自定义View,我们可以轻松实现圆角图片的效果。这个过程涉及到Android图形系统的...

Global site tag (gtag.js) - Google Analytics