已编辑:当我得到一个教程时
当您想要动态绘制一些二维图形时,ShapeDrawable 对象可能会满足您的需要。使用ShapeDrawable,您可以以编程方式绘制原始形状并以任何可以想象的方式设置它们的样式。
ShapeDrawable 是Drawable 的扩展,因此您可以在任何需要Drawable 的地方使用一个ShapeDrawable — 可能用于视图的背景,使用setBackgroundDrawable() 设置。当然,您也可以将您的形状绘制为自己的自定义视图,以随意添加到您的布局中。因为 ShapeDrawable 有自己的 draw() 方法,所以您可以创建 View 的子类,在 View.onDraw() 方法期间绘制 ShapeDrawable。这是 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);
}
}
在构造函数中,ShapeDrawable 被定义为OvalShape。然后给它一个颜色并设置形状的边界。如果不设置边界,则不会绘制形状,如果不设置颜色,则默认为黑色。
定义了自定义视图后,可以按照您喜欢的任何方式进行绘制。通过上面的示例,我们可以在 Activity 中以编程方式绘制形状:
CustomDrawableView mCustomDrawableView;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mCustomDrawableView = new CustomDrawableView(this);
setContentView(mCustomDrawableView);
}
如果您想从 XML 布局而不是从 Activity 中绘制此自定义可绘制对象,则 CustomDrawable 类必须覆盖 View(Context, AttributeSet) 构造函数,该构造函数在通过 XML 膨胀实例化视图时调用。然后在 XML 中添加一个 CustomDrawable 元素,如下所示:
<com.example.shapedrawable.CustomDrawableView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
ShapeDrawable 类(与android.graphics.drawable 包中的许多其他Drawable 类型一样)允许您使用公共方法定义drawable 的各种属性。您可能需要调整的一些属性包括 Alpha 透明度、颜色过滤器、抖动、不透明度和颜色。
您还可以使用 XML 定义原始的可绘制形状。有关详细信息,请参阅Drawable Resources document 中有关 Shape Drawables 的部分。
试试看:
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<com.example.shapedrawable.CustomDrawableView
android:layout_width="fill_parent"
android:layout_height="fill_parent"/>
<ListView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:cacheColorHint="#00000000"/>
</RelativeLayout>
并将您的自定义可绘制对象设置为 ImageView。
希望这会奏效。 :)