android .9资源简单使用方法
2016-05-16 22:37
609 查看
1.什么是.9资源
简单地说,.9.png资源是安卓上面处理可拉伸视觉资源的一种格式。为什么需要可拉伸?第一,UI控件形状千奇百怪,显然矩形是无法完全满足需求的。第二,安卓机型碎片化严重,各种分辨率的屏幕都需要适配。所以很多时候视觉设计者设计的样式是固定的一些位置特殊处理,其余可无限拉伸,譬如,四个圆角处理好,其余位置拉伸即可。“.9”是九宫格的意思,所以也叫九宫格图片。
2.如何制作.9资源
安卓SDK提供了一个简单易用的制作工具draw9patch,在sdk/tools/下。启动以后是如下界面:
将某一个png图片拖入,譬如下图:
拖入后可以看到
左侧是操作区,右侧是效果展示区。如何操作?非常简单,用位于上下左右四个边缘的一个像素的黑线定义横向和纵向的拉伸区域。譬如上图,我希望横向可以在中间的区域(非圆角区域)拉伸,纵向箭头以上的区域拉伸(箭头始终位于右下角的效果)。那么,需要这样来配置:
点击或按住鼠标左键是绘制黑线,shift+点击或按住鼠标左键是擦除。有对齐阴影帮助绘制。右侧可以实时显示出拉伸效果。如果制作.9有误,在apk build time会报错提示。制作完成之后,ctrl+s另存为.9.png文件。
3.如何在程序中使用.9资源
主要有两种场景:作为背景、作为蒙板。
(1)作为背景
假设你的.9资源在drawable中定义为 R.drawable.myninepatch。
(2)作为蒙板
即在一个已经有完整视觉内容的view上面,绘制一个.9,利用其透明的部分,显示原有view的部分内容。
需要override View的onDraw()方法:
简单地说,.9.png资源是安卓上面处理可拉伸视觉资源的一种格式。为什么需要可拉伸?第一,UI控件形状千奇百怪,显然矩形是无法完全满足需求的。第二,安卓机型碎片化严重,各种分辨率的屏幕都需要适配。所以很多时候视觉设计者设计的样式是固定的一些位置特殊处理,其余可无限拉伸,譬如,四个圆角处理好,其余位置拉伸即可。“.9”是九宫格的意思,所以也叫九宫格图片。
2.如何制作.9资源
安卓SDK提供了一个简单易用的制作工具draw9patch,在sdk/tools/下。启动以后是如下界面:
将某一个png图片拖入,譬如下图:
拖入后可以看到
左侧是操作区,右侧是效果展示区。如何操作?非常简单,用位于上下左右四个边缘的一个像素的黑线定义横向和纵向的拉伸区域。譬如上图,我希望横向可以在中间的区域(非圆角区域)拉伸,纵向箭头以上的区域拉伸(箭头始终位于右下角的效果)。那么,需要这样来配置:
点击或按住鼠标左键是绘制黑线,shift+点击或按住鼠标左键是擦除。有对齐阴影帮助绘制。右侧可以实时显示出拉伸效果。如果制作.9有误,在apk build time会报错提示。制作完成之后,ctrl+s另存为.9.png文件。
3.如何在程序中使用.9资源
主要有两种场景:作为背景、作为蒙板。
(1)作为背景
假设你的.9资源在drawable中定义为 R.drawable.myninepatch。
ImageView image = (ImageView)findViewById(R.id.imageview); image.setBackgroundResource(R.drawable.myninepatch);
(2)作为蒙板
即在一个已经有完整视觉内容的view上面,绘制一个.9,利用其透明的部分,显示原有view的部分内容。
需要override View的onDraw()方法:
@Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); Drawable drawable = getDrawable(); if (drawable != null) { NinePatchDrawable mask = (NinePatchDrawable) context.getDrawable(R.drawable.myninepatch); mask.setBounds(0, 0, getMeasuredWidth(), getMeasuredHeight()); //可以用一个color filter来灵活设置蒙板颜色 mask.setColorFilter(new PorterDuffColorFilter(0xFFFFFFFF, PorterDuff.Mode.SRC_ATOP)); mask.draw(canvas); } }
相关文章推荐
- Android开发之本地音乐播放器(增强版)
- 怎么关联android-support-v4源码
- android html5 的弹出窗设置
- Android Surface View绘图API详解
- Android开发工具之Android Studio---版本控制SVN使用(二)
- Android LinearLayout布局的layout_weight属性探究
- Android Scroll分析(一)——滑动效果是如何产生的
- Android事件传递机制
- 快速集成Bugly Android SDK
- android studio 使用+错误总结
- Rxandroid中doOnSubscribe(),如何指定其运行的线程?
- Android Studio 魅族手机调试LogCat不显示解决方法
- android Callable Future FutureTask 解析
- Android wpa_supplcant 之--配置文件
- Android学习记录(十四) digest鉴权的文件播放
- Rxandroid中doOnSubscribe()执行默认情况下所在的线程
- Android开发60条技术经验总结
- android开发第一次心的
- Android学习之一
- Android 手把手教您自定义ViewGroup(一)