Подтвердить что ты не робот

Векторная графика в Android

Я работаю над приложением, которое отображает чужую базу данных изображений. Изображения, которые у них есть, представляют собой векторную графику и могут быть преобразованы в любой формат, однако сохранение их в векторном формате является хорошим, потому что пользователи, вероятно, захотят увеличить масштаб.

Вопрос в том, есть ли встроенный способ отображения векторной графики в Android? Формат не имеет значения - мы можем конвертировать. Текущий формат, который мы рассматриваем, является PDF, но, учитывая, что нет встроенной поддержки PDF, мне пришлось бы сделать что-то довольно сложное, чтобы заставить его работать (например, интегрируя poppler в мое приложение через NDK). Альтернативой является просто преобразовать векторную графику в более простой формат (JPG, GIF), но я бы предпочел избежать этого.

4b9b3361

Ответ 1

Отъезд svg-android - это относительно новая библиотека, и она поддерживает только SVG Basic, но это библиотека, используемая для создания Androidify. На домашней странице есть примеры того, как получить Drawable из SVG, который будет выглядеть так, как вы хотите.

Ответ 2

Создание векторных чертежей.


Я знаю, что этот вопрос старый, но я столкнулся с этим же требованием, и я рад узнать, что Android 5.0 теперь поддерживает векторные чертежи. Вы можете использовать тег <vector> и данные пути для создания векторных чертежей, и это работает как шарм API-21. Вот пример, который создает векторное изображение в форме сердца.

<!-- res/drawable/heart.xml -->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
    android:height="256dp"
    android:width="256dp"
    android:viewportWidth="32"
    android:viewportHeight="32">

    <!-- draw a path -->
    <path android:fillColor="#8fff"
        android:pathData="M20.5,9.5
                    c-1.955,0,-3.83,1.268,-4.5,3
                    c-0.67,-1.732,-2.547,-3,-4.5,-3
                    C8.957,9.5,7,11.432,7,14
                    c0,3.53,3.793,6.257,9,11.5
                    c5.207,-5.242,9,-7.97,9,-11.5
                    C25,11.432,23.043,9.5,20.5,9.5z" />
</vector>

Единственная проблема, с которой я столкнулся до сих пор, заключается в том, что она не включена в файлы поддержки, и поэтому вы не можете использовать их в более низких API. Замечательно то, что вы можете даже анимировать векторные чертежи сейчас. Вот пример.

<!-- res/drawable/vectordrawable.xml -->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
    android:height="64dp"
    android:width="64dp"
    android:viewportHeight="600"
    android:viewportWidth="600">
    <group
        android:name="rotationGroup"
        android:pivotX="300.0"
        android:pivotY="300.0"
        android:rotation="45.0" >
        <path
            android:name="v"
            android:fillColor="#000000"
            android:pathData="M300,70 l 0,-70 70,70 0,0 -70,70z" />
    </group>
</vector>

Подробнее об анимации с векторной анимацией здесь.

Ответ 3

TinyLive SVG предоставляет средство просмотра SVG для Android. Я не пробовал, поэтому я понятия не имею, хорошо это или нет.

Чтение этого запроса ошибки кажется, что SVG может быть включен в браузере - и, следовательно, предположительно WebView тоже - в Gingerbread. Но так как это возможная функция в будущей версии, это, вероятно, сейчас не очень помогает вам.

Ответ 4

Посмотрите на библиотеку BetterVectorDrawable вместе с конвертером SVG в VectorDrawable.

BetterVectorDrawable - это реализация VectorDrawable для Android 4. 0+ с настраиваемым режимом отката на Android 5. 0+.

Конвертер SVG в VectorDrawable - это пакетный конвертер изображений SVG в XML файлы ресурсов Android VectorDrawable. Онлайн версия здесь.

Ссылки указывают на readmes, которые предоставляют достаточно информации о том, как использовать lib и конвертер.

Ответ 5

Бесстыдная самозапуск, но, возможно, вас будет интересовать ribbon-vg? Это базовая, чистая Java и быстрая; опираясь на передовые методы, чтобы освободить процессор в процессе рендеринга.

Ответ 6

Этот вопрос старый. Но надеюсь, мой ответ поможет будущим посетителям здесь.

Размещаем файлы VectorDrawable в папке drawable. AnimatedVectorDrawable также является рисованным. Следовательно, мы помещаем эти файлы также в папку для рисования. Ниже приведены примеры двух:

vd_omega.xml

    <vector 

        xmlns:android="http://schemas.android.com/apk/res/android"
                android:width="1536dp"
                android:height="864dp"
                android:viewportWidth="1536.0"
                android:viewportHeight="864.0">

            <path
                android:name="my_vector"
                android:pathData="M  162   8
                q    -07    00   -41    26
                q    -34    27   -50    64
                q    -25    59   -19   117
                q     07    70    53   121
                q     57    63   151    62
                q     87   -01   140   -66
                q     46   -55    48  -142
                q     01   -56   -34  -105
                q    -38   -52   -77   -70
                l    -29   -11
                q     16   -01    31   -02
                q     59   -01   119   -02 "

                android:strokeLineCap="round"
                android:strokeColor="#f00f"
                android:fillColor="#00000000"
                android:strokeWidth="32"
                android:trimPathEnd="0"/>



        </vector>

avd_omega_animator.xml

<animated-vector
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:aapt="http://schemas.android.com/aapt"
android:drawable="@drawable/vd_number8">

    <target
        android:name="my_vector"
        android:animation="@animator/trimpath_animator"/>       



</animated-vector>

Затем вы можете анимировать с помощью файла аниматора, как показано ниже:

trimpath_animator.xml

<set xmlns:android="http://schemas.android.com/apk/res/android">

<objectAnimator
android:propertyName="trimPathEnd"
android:duration="1000"
android:valueFrom="0"
android:valueTo="1"
android:repeatCount="0"
android:repeatMode="reverse"/>
</set>

Вы можете иметь больше аниматоров в одном файле для различных свойств.

В вашем файле макета

activity_main.xml

<RelativeLayout
    xmlna:android="http://schemasandroid.com/apk/res/android"
    xmlna:app="http://schemasandroid.com/apk/res-auto"
    xmls:tools="http:schemas.android.com/tools"
    android:id="@+some_id"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    tools:context=".MainActivity">

    <ImageView
    android:id="@+id/my_image"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:src="@drawable/avd_omega_animator"/>

</RelativeLayout>

В своей деятельности напишите следующий код в onCreate:

импорт... импорт...

public class MyActivity extends Activity{

ImageView myImage;


...
...
setContentView(R.layout.activity_main);
myImage = (ImageView)findViewById(R.id.my_image);
Drawable d = myImage.getDrawable():
if(d instance of Animatable){
d.start;
}

и увидеть веселье.

Так же, как я использовал getDrawable выше, вы также можете использовать другие методы для размещения рисованных объектов в ImageView, такие как setImageDrawable ("d") и т.д.

Вы также можете обратиться к разделу "Введение в техники анимации значков" г-на Алекса Локвуда по адресу:

https://www.androiddesignpatterns.com/2016/11/introduction-to-icon-animation-techniques.html

для хороших примеров.

Надеюсь, я дал вам полезный ответ.

Весь приведенный выше пример кода работает. Это также просто и прямо.