Как раздуть фигуру на холсте?

У меня есть форма, хранящаяся в файле xml в моем каталоге drawables. Я хотел бы использовать его в своем Canvas (я знаю, что могу определить форму в коде, но я пытаюсь понять, как реализовать его более «Androidy»).

Я в недоумении относительно синтаксиса для получения формы на холсте. Должен ли я пытаться преобразовать его в форму или чертеж? Нужна ли Матрица? Краска? и т.п.

Мне не нужно много деталей, просто укажите мне в правильном направлении 🙂

Благодарю.

[Править] Моя форма Android XML выглядит так:

<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" > <stroke android:width="3px" android:color="#583010"/> <solid android:color="#ffffff" /> <corners android:bottomRightRadius="3px" android:bottomLeftRadius="3px" android:topLeftRadius="3px" android:topRightRadius="3px"/> </shape> 

Я предполагаю, что должен быть какой-то способ получить это завышенное, нет? [/редактировать]

Давайте назовем ваш файл 'res / drawable / my_shape.xml'. Следующие строки кода раздувают my_shape.xml из XML и выводят его содержимое на холст. ImageView используется для доказательства того, что это работает.

 Drawable shape = getResources().getDrawable(R.drawable.my_shape); Bitmap bitmap = Bitmap.createBitmap( shape.getIntrinsicWidth(), shape.getIntrinsicHeight(), Config.ARGB_8888 ); Canvas canvas = new Canvas( bitmap ); shape.setBounds( 0, 0, canvas.getWidth(), canvas.getHeight() ); shape.draw( canvas ); ImageView imageView = (ImageView) findViewById(R.id.my_imageView); imageView.setImageBitmap( bitmap ); 

Убедитесь, что эти строки кода выполняются после setContentView в вашей onCreate.

Чтобы устранить как можно больше путаницы, это функциональный образец my_shape.xml:

 <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:innerRadius="0dp" android:shape="ring" android:thicknessRatio="1.9" android:useLevel="false" > <solid android:color="#DDAAAFFF" /> <size android:height="10dp" android:width="10dp" /> <stroke android:width="1dp" android:color="#AAAAAA" /> </shape> 1 <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:innerRadius="0dp" android:shape="ring" android:thicknessRatio="1.9" android:useLevel="false" > <solid android:color="#DDAAAFFF" /> <size android:height="10dp" android:width="10dp" /> <stroke android:width="1dp" android:color="#AAAAAA" /> </shape> 

Определено как? Что-то вроде SVG? Вам нужно будет написать собственный синтаксический анализатор и перевести форму / spaths на вызовы Canvas.drawPath()/Rect() и т. Д. Вы можете написать собственное представление, которое знает, как рисовать себя и т. Д. В любом случае кто-то должен Напишите код для него. Надувание – это просто синтаксический анализ XML и создание графа объектов.