Android图形系统中形状Drawable使用详解打赏

当你想动态画二维图形,ShapeDrawable对象是可能是你合适的选择.使用ShapeDrawable,你可以随意画出原始的形状并且应用到任何风格.

ShapeDrawable是一个Drawable的派生类,所以你可以用于任何想使用Drawable的地方—比如可能是一个View的背景,通过setBackgroundDrawable()所设置.当然,你也可以把你的形状作为它自己的自定义View绘制,然后以你喜欢的方式添加到你的Layout.因为ShapeDrawable有它自己的draw()方法,你可以创建一个View的子类然后在View.onDraw()的方法中画这个ShapeDrawable.下面是一个简单的View派生类,它仅把ShapeDrawable当作一个View绘出:

[java] 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);
}
}
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中用程序随意作画:

[java] CustomDrawableView mCustomDrawableView;

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

setContentView(mCustomDrawableView);
}
CustomDrawableView mCustomDrawableView;

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

setContentView(mCustomDrawableView);
}

如果你想在XMLlayout中画这个自定义drawable而不是在Activity中,那么这个CustomDrawableView类必须重写View(Context,AttributeSet)构造方法,此方法在从XML初始化一个View时被调用.然后添加一个CustomDrawable元素到XML,像这样:

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

ShapeDrawable类(就像android.graphics.drawable包中的其它一些Drawable类型)允许你使用公开方法来定义drawable的各种属性.你要调整的一些属性可能有alpha透明,颜色过虑,抖动,opacity和color等.

Android图形系统中形状Drawable使用详解
文章《Android图形系统中形状Drawable使用详解》二维码
  • 微信打赏
  • 支付宝打赏

已有17条评论

  1. 朴人博客

    什么时候你的名字显示正常了我就告诉你。

    2012-07-23 17:16 回复
  2. 朴人博客

    什么时候你的名字显示正常了我就告诉你。

    2012-07-23 17:16 回复
  3. 朴人博客

    欢迎常来

    2012-07-23 17:15 回复
  4. 朴人博客

    欢迎常来

    2012-07-23 17:15 回复
  5. 高压泵博客

    博客很有特色,看了博文很有收获。我是高压泵WordPress博客,欢迎来访、留言留网址,我必寻网址再次回访!谢谢!

    2012-06-18 08:06 回复
  6. 韩版女装

    这个不错啊

    2012-06-17 10:33 回复
  7. 不亦乐乎

    是我浏览器出问题了吗,怎么看起来像你自己在回复一样,头像都一个样

    2012-06-15 16:59 回复
    • 穷小子

      这个貌似是多说的头像设置的。我昨天无意间设置了自己的头像,其实是默认头像。

      2012-06-15 18:44 回复
  8. 游客 895

    已经好几次过来看你写的文章,都很不错。

    2012-06-15 02:03 回复
  9. 1314

    文章分析的相当透彻,有机会多多交流。网络营销论坛http://92tui.com/

    2012-06-14 19:13 回复
  10. 游客 87

    楼主,你的主题很不错,是在哪里找的~

    2012-06-14 12:53 回复
  11. 游客 154

    第一次来支持你。

    2012-06-11 08:17 回复
  12. 游客 23

    非常喜欢博主的文章。。。。欢迎回访

    2012-06-10 12:18 回复
  13. 游客 512

    楼主辛苦了 写这么好的文章给大家普及知识,呵呵

    2012-06-10 01:57 回复
  14. http://mongn.info/

    非常喜欢博主的文章。。。。欢迎回访

    2012-06-09 23:06 回复
  15. 露得清官网

    我来看看了。

    2012-06-09 17:58 回复

(必填)

(必填)

(可选)