Отредактировано: как я получил учебник
Когда вы хотите динамически нарисовать некоторую двухмерную графику, объект ShapeDrawable, вероятно, подойдет вашим потребностям. С ShapeDrawable вы можете программно рисовать примитивные фигуры и стилизовать их любым удобным для вас способом.
ShapeDrawable является расширением Drawable , поэтому вы можете использовать его там, где ожидается Drawable - возможно, для фона вида, установленного с помощью setBackgroundDrawable () . Конечно, вы также можете нарисовать свою форму в виде собственного пользовательского вида, который будет добавлен в ваш макет, как вам угодно. Поскольку ShapeDrawable имеет свой собственный метод draw (), вы можете создать подкласс View , который рисует ShapeDrawable во время метода View.onDraw (). Вот базовое расширение класса View, которое делает это, чтобы нарисовать ShapeDrawable как View:
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 . Затем задается цвет и устанавливаются границы фигуры. Если вы не установите границы, то форма не будет нарисована, тогда как если вы не установите цвет, по умолчанию будет черный.
С определенным пользовательским представлением его можно нарисовать любым способом. На примере выше мы можем программно нарисовать фигуру в Деятельности:
CustomDrawableView mCustomDrawableView;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mCustomDrawableView = new CustomDrawableView(this);
setContentView(mCustomDrawableView);
}
Если вы хотите нарисовать этот пользовательский чертеж из макета XML, а не из Activity, то класс CustomDrawable должен переопределить конструктор View (Context, AttributeSet) , который вызывается при создании экземпляра Просмотр через инфляцию из XML. Затем добавьте элемент CustomDrawable в XML, например, так:
<com.example.shapedrawable.CustomDrawableView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
Класс ShapeDrawable (как и многие другие типы Drawable в пакете android.graphics.drawable ) позволяет вам определять различные свойства drawable с помощью открытых методов. Некоторые свойства, которые вы можете настроить, включают альфа-прозрачность, цветной фильтр, дизеринг, непрозрачность и цвет.
Вы также можете определять примитивные нарисованные фигуры, используя XML. Для получения дополнительной информации см. Раздел о Drawable Shape в документе Drawable Resources .
Попробуйте:
<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.
Надеюсь, это сработает. :)