4.使用Draw9Patch.jar制作9.PNG图片之定义内容区域。

是不是觉得文字和边距挨的太近,好,我们使用right和bottom边的线来定义内容区域,来达到增大内边距的目的。

我们定义了一个很小的内容区域,其他的地方则自动充当边框,从而使内边距显的很大,如下图,

在这里,我要特别说明,一开始为了增大内边距,很容易惯性思维,在<TextView>中申明android:padding="10dip" 之类的,我在这里劝告朋友们不要这么做,一是你将无法预知你的显示,二是这比较混淆,因为设置内容区域就是确定padding,所以我在前面部分说他们是神似。我个人认为通过内容区域设定padding比在布局xml中定义padding更优雅,更简洁!
关于Draw9Patch工具的其他使用说明,我在次不再累述,因为要说的话太多,为了节省篇幅,请参考官方文档。

5.制作.9.PNG的高级技巧。
对于初学Draw9Patch的人来说,这可以算是高级技巧,那就是:拉伸区域,可以不是连续的,可以不止一块,而且是和自定义的边框线的长度成正比。
直接上图说明:

6.SDK中如何处理9.PNG图片。
SDK专门针对9.PNG做了定义和处理,这里我们只是做个简单的流程分析,Bitmap在读取图像流数据的时候,会把判断图片的NinePatchChunk(9Patch数据块),如果NinePatchChunk不为空,则是NinePatchDrawable,NinePatchDrawable则又会交给NinePatch处理:

 setNinePatchState(new NinePatchState(                new NinePatch(bitmap, bitmap.getNinePatchChunk(), "XML 9-patch"),                padding, dither), r);

NinePatch检验成功则调用本地方法,绘制出最终的图片:

nativeDraw(canvas.mNativeCanvas, location,                mBitmap.ni(), mChunk, paint != null ? paint.mNativePaint : 0,                canvas.mDensity, mBitmap.mDensity);

7.android系统中大量应用了9.PNG图片。
通过解压随便一个rom,找到里面的framework_res.apk,里面有大量的9.PNG格式文件,被广泛的应用起来,比如常见的有:
按钮:
解锁:
下拉框:
标题栏:
Toast:
还有搜索,键盘,放大缩小控件,时间加减等等,我就不一一列举。

8.最后送上一些图例,以飨读者,以做后鉴:

赏图1 本人之作

赏图2 下拉按钮

赏图3 文章头部背景

赏图4 系统头部背景

赏图5 再来一个头部背景

本文Android实现背景图自适应不失真就介绍到这了,愿对大伙有所帮助!!!

更多相关文章

  1. Android(安卓)— 之内容提供器(Content Provider)
  2. Android之自定义View的死亡三部曲之(Measure)
  3. Android(安卓)字符串应用浅析
  4. Android(安卓)sdk开发(二) Log日志类的设计
  5. 【Android(安卓)界面效果15】Android(安卓)UI 之一步步教你自定
  6. Android控件之SlidingDrawer(滑动式抽屉)详解与实例
  7. Android(安卓)中自定义View的应用(二)
  8. Android之实现定时开关机
  9. Android(安卓)ListView 自定义背景后 滚动时的背景变黑问题

随机推荐

  1. Android编程之manifest上遇到的错误
  2. Android(安卓)JNI开发入门之二(javah命令
  3. html5游戏移植到android并打包成apk,加广
  4. android中Invalidate和postInvalidate的
  5. Android使用Opencv图片处理 Mat与Bitmap
  6. Android系统的架构
  7. Android(安卓)adapter 数据适配器
  8. OpenCore的代码结构
  9. android - adb命令的使用
  10. android本地后台服务示例