`
huobengluantiao8
  • 浏览: 1029039 次
文章分类
社区版块
存档分类
最新评论

Android画布和图形绘制---Canvas and Drawables(四)

 
阅读更多

本文译自:http://developer.android.com/guide/topics/graphics/2d-graphics.html

形状绘制

在想要动态的绘制一些二维图形的时候,ShapeDrawable对象将会满足你的需要。用ShapeDrawable对象能够编程绘制任何能够想象得到的原始形状和主题样式。

ShapeDrawable类是Drawable类的一个子类,因此能够在任何期望使用Drawable对象的地方使用ShapeDrawable对象---如用setBackgroundDrawable()方法设置View对象的背景。当然,也可以用绘制的形状作为自己定制的View对象,然后把它添加到你的布局中。因为ShapeDrawable类有自己的draw()方法,所以能够在View.onDraw()方法执行期间创建一个绘制ShapeDrawable图形的View子类。以下代码只是这种处理一个基本的扩展,它用ShapeDrawable对象来绘制一个View视窗:

publicclassCustomDrawableViewextendsView{
privateShapeDrawable mDrawable;

publicCustomDrawableView(Context context){
super(context);

int x =10;
int y =10;
int width =300;
int height =50;

mDrawable
=newShapeDrawable(newOvalShape());
mDrawable
.getPaint().setColor(0xff74AC23);
mDrawable
.setBounds(x, y, x + width, y + height);
}

protectedvoid onDraw(Canvas canvas){
mDrawable
.draw(canvas);
}
}
在上例的构造器中,ShapeDrawable是作为一个OvalShape对象来定义的,然后给它设定了一个颜色和边框。如果不设置边框,那么形状就不会被绘制;如果没有设置颜色,那么默认的颜色是黑色。

用这个定制的View对象,能够绘制任何想要的形状。在上面的例子中,我们在一个Activity中用编程的方式绘制了一个形状:

CustomDrawableView mCustomDrawableView;

protectedvoid onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
mCustomDrawableView
=newCustomDrawableView(this);

setContentView
(mCustomDrawableView);
}

如果想要从XML布局中,而不是在Activity中来绘制这个定制的图形,那么CustomDrawable类必须重写View(Context, AttributeSet)构造器,该构造器会在从XML中填充View对象时被调用。然后把这个CustomDrawable元素添加到XML中,如:

<com.example.shapedrawable.CustomDrawableView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>

ShapeDrawable类(像在android.graphics.drawable包中的其他一些Drawable类型)允许用公共的方法定义各种属性。其中有些属性可能需要调整,包括:透明度、颜色过滤、抖动、不透明和颜色等。

也能够使用XML定义初始的绘制形状。更多的信息,请阅读绘图资源(Drawable Resources)文档中的形状绘制(Shape Drawables)一节(http://developer.android.com/guide/topics/resources/drawable-resource.html#Shape
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics