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
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值