Как накачать форму для рисования на холсте? - PullRequest
5 голосов
/ 15 ноября 2011

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

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

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

Спасибо.

[править] Моя форма 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>

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

Ответы [ 2 ]

6 голосов
/ 18 ноября 2013

Давайте назовем ваш файл 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>
0 голосов
/ 15 ноября 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...