Shape Drawable

当你想动态的绘制一些而为图形, ShapeDrawable可能对你来说比较合适。通过一个 ShapeDrawable ,你可以通过程序绘制原始的图像和你可以想到的样式。
ShapeDrawable是Drawable的一个子类,所以你可以在使用Drawable可以使用的地方使用他。例如你可以通过setBackgroundDrawable()把他设置为一个View的背景。当然,你也可以在拥有他的自定义的View中绘制你的形状,或者添加到你的布局中。由于ShapeDrawable拥有自己的draw方法,你可以创建一个View的子类,然后在他的View.onDraw()方法中绘制ShapeDrawable。如下是一个基于View类的基本扩展,来像View类一样绘制ShapeDrawable 。
public class CustomDrawableView extends View {
      private ShapeDrawable mDrawable;

      public CustomDrawableView(Context context) {
      super(context);

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

      mDrawable = new ShapeDrawable(new OvalShape());
      mDrawable.getPaint().setColor(0xff74AC23);
      mDrawable.setBounds(x, y, x + width, y + height);
      }

      protected void onDraw(Canvas canvas) {
      mDrawable.draw(canvas);
      }
      }
在构造函数中,我们定义了以个OvalShape类型的ShapeDrawable.然后我们设置了这个图形的颜色和边界。如果我们不设置边界。那么这个图像不会不会被绘制,但是如果你不设置颜色,默认他会被设置为黑色。
通过已经自定义的View,你可以把他绘制到你想要的任何地方。使用上面的例子,我们可以以编程的方式在一个Activity中绘制这个图形:

     CustomDrawableView mCustomDrawableView;

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

      setContentView(mCustomDrawableView);
      }

如果你不希望从Activity而是想从一个XML布局文件中绘制这个自定义的Drawable, 这样的话 CustomDrawable 必须重置View(Context, AttributeSet) 构造方法,因为这个方法在通过XML实例话这个对象的时候将会被调用。然后,你可以 像下面这样添加一个CustomDrawable元素到XML.
   <com.example.shapedrawable.CustomDrawableView
      android:layout_width="fill_parent"
      android:layout_height="wrap_content"
      />

ShapeDrawable 类(像android.graphics.drawable包中的其他Drawable类型) ,允许你通过该公共的方法定义各种各样的属性。某些属性你可能希望调整,例如切换alpha值,颜色过滤器,抖动处理,透明度以及颜色。
你也可以通过XML定义原型的drawable图形。要获取更多的信息,查看 Drawable Resources中有关Shape Drawables的文档。

你可能感兴趣的:(Shape Drawable)