Android绘图必杀技-Canvas跟Drawables

Android绘图必杀技---Canvas和Drawablesprotected void onCreate(Bundle savedInstanceState) {super.onCr

Android绘图必杀技---Canvas和Drawables

  protected void onCreate(Bundle savedInstanceState) {  super.onCreate(savedInstanceState);  mCustomDrawableView = new CustomDrawableView(this);  setContentView(mCustomDrawableView);  }

如果你喜欢通过XML布局文件定义drawable来代替直接在Activity直接写代码,那它必须覆盖?View(Context, AttributeSet)构造方法,它在View从XML里获取初始化时被调用。然后添加CustomDrawable元素在XML里:



ShapeDrawable类允许你通过drawable的public方法设置不同的属性。像调整透明度,颜色,抖动,滤色器等。
你也可以由XML定义drawable shapes。更多信息请看Drawable Resources

* Nine-patch*

NinePatchDrawable图像是可伸展的位图。当你将它作为背景时,Android会自动适应View的大小。NinePatch的一个案例是背景使用标准Android按钮。按钮必须能根据不同的长度自动伸展。NinePatch drawable是标准的PNG格式,在最外面一圈额外增加1px的边框。
它必须以.9.png为扩展名,并且保存在res/drawable/目录下。

这个1px的边框就是用来定义图片中可扩展的和静态不变的区域。在边框的左上角画一个1像素的黑线来表面伸缩区域。你想要多少伸缩区域都可以:他们的绝对尺寸保持相同,所以最大的区域永远是最大的。

你也可以定义一个可选的可移动部分在图片上,通过下面和右边的线。如果一个View对象设置NinePatch作为背景,然后改变View上的文字, 它会自己伸展,所有的文字将会适应你通过右边和下面的线定义的区域。如果不包括填充线, Android使用左边和上面的线定义可绘区域。

为了阐明这两条线的不同,左和上的线定义图片像素允许被复制以便拉伸图片。下方和右边的线定义相对区域在图片的内容区域。

下面是简单的按钮使用例子:
http://developer.android.com/images/ninepatch_raw.png

NinePatch通过左上线来定义伸缩区域,并且通过下右线来定义可绘区域。第一幅图,灰色虚线确定的图片区域将会被拉伸。第二幅图的粉色区域 确定一个View里的内容显示区域。如果内容不适合这个区域,图片将会被拉伸。

Draw 9-patch工具提供了简便的方法来创建我们的NinePatch图片,使用WYSIWYG图形工具。

Example XML

注意宽和高设置为wrap_content使按钮内容自动调整。

?

http://developer.android.com/images/ninepatch_examples.png