VectorDrawable-Android의 롤리팝 이전 버전에서 어떻게 든 사용할 수 있습니까? [닫은]


87

배경

Android는 이제 " VectorDrawable "(및 AnimatedVectorDrawable , BTW) 이라는 클래스를 통해 일종의 벡터 드로잉을 지원합니다 . Android-Studio 의 새로운 기능을 살펴보면서 이에 대해 알아 냈습니다 .

이 여러 폴더 (에 여러 개의 파일을 넣어하지 말 것 궁금 mdpi, hdpi, xhdpi, 등). 그것은 좋을 것이고 경우에 따라 앱 크기를 최소화 할 수 있습니다.

질문

이 새로운 수업에 대해 몇 가지 질문을하고 싶습니다.

  1. Google의 지원 라이브러리 라이브러리를 통해 이전 Android 버전에서 사용할 수 있습니까?

  2. 어떻게 작동하는지 잘 모르지만 Lollipop은 SVG 파일을 처리 할 수 ​​있습니까? SVG 파일에서 달성 할 수있는 모든 작업을 수행 할 수 있습니까?

  3. 내가 찾은 문서 외에 샘플 / 튜토리얼 / 비디오가 있습니까?


3
내가 볼 수있는 한 VectorDrawable은 SVG 파일 의 안드로이드 화 입니다. 내가 사용하고 SVG 의 사용을 통해 한 해 동안의 위해를 제 3의 라이브러리 하지만. ( android-svg , svg-android 등). 비슷한 이름의 사람들이 있습니다. 각각은 다른 것과 다르므로 필요에 따라 정확하게 선택하십시오.
— Phantômaxx 2014 년

7
SVG를 xml 리소스 벡터로 변환하기위한 온라인 도구를 만들었습니다 (롤리팝 전용) -inloop.github.io/svg2android- 초기 알파에서는 아직 많이 테스트되지 않았습니다. 간단한 svg 파일 (안드로이드 지원)을 지원합니다. 잉크 스케이프로 테스트했습니다. 일부 모양 (직사각형, 원형, 나선형 ...)을 그리고 모두 선택한 다음 "Path-> Object to path"를 선택하고 * .svg로 내 보냅니다. 사이트에 xml을 생성하고 잘 작동합니다.
— Yuraj 2014 년

1
@Yuraj 와우, 너무 멋지다! 훌륭한 일 ! 그리고 그렇게 짧은 시간에 ... 여기, 내 +1. :)
— 안드로이드 개발자

관련 inloop.github.io/svg2android ... s a very usefull tool but I그런 경우 부적절한 결과를 얻었고 무엇이 잘못되었는지 모르겠습니다 ... 흠, 추가 릴리스를 위해이 도구가 잘못된 형식에 대해 알려주기를 바랍니다. 3 자 libs와 모든 것을 함께 사용 순수 SVG-파일은 ... 좋아하다
— 알렉스 Zezekalo

@AlexZezekalo Github 웹 페이지에 글을 올려야합니다
— 안드로이드 개발자

답변:


39

2016 년 3 월 업데이트

으로 안드로이드 지원 라이브러리 23.2.1 업데이트 지원 벡터 드로어 블 Drawable 및 애니메이션 벡터 드로어 블 Drawable. (동일하게 latestone을 사용할 수도 있습니다)

gradle 파일에서 라이브러리 버전을 업데이트하십시오.

compile 'com.android.support:recyclerview-v7:23.2.1'

벡터 드로어 블을 사용하면 여러 png 애셋을 XML로 정의 된 단일 벡터 그래픽 으로 바꿀 수 있습니다 . 이전에는 Lollipop 이상 장치로 제한되었지만 이제 VectorDrawable및 두 가지 모두 AnimatedVectorDrawable새로운 지원 라이브러리 ( 벡터 드로어 블 및 애니메이션 벡터 드로어 블 지원)를 통해 사용할 수 있습니다 . app:srcCompat참조 벡터 드로어 블에 대한 새 속성.

샘플 예제 와 함께 github 에서 소스를 확인하십시오 .

v7 appcompat 라이브러리의 변경 사항 :

벡터 자산에 대한 종속성을 되돌려 appcompat 라이브러리를 사용하는 개발자 VectorDrawable가 관련 빌드 플래그를 강제로 사용하지 않도록 했습니다.


3
벡터 지원에 관해서는 gradle 플러그인을 업데이트하고 "defaultConfig"내에서 "vectorDrawables.useSupportLibrary = true"를 사용하는 것으로 충분하지 않습니까?
— 안드로이드 개발자

1
예, Gradle 플러그인 2.0 이상 및 Gradle 플러그인 1.5의 경우 추가해야합니다 -> android {defaultConfig {generatedDensities = []} // 이것은 2.0+ Gradle 플러그인 aaptOptions {additionalParameters "--no-version에 의해 처리됩니다. -vectors "}}
— 아 미트 Vaghela

1
또한 여기에 코드를 보여주세요. 링크가 언젠가 끊어 질 수 있습니다. 이 노력 :) +1 얻을 것이다
— 안드로이드 개발자

확실합니다. git과 여기에 짧은 시간에 코드를 게시합니다.
— Amit Vaghela

2
compile위 의 진술은 프로젝트가 RecyclerView항상 그런 것은 아니지만 사용한다는 것을 의미합니다 .
— razzledazzle

13

업데이트 2 : 지원 라이브러리 23.4.0에서 다시 활성화합니다.

AppCompat 사용자를 위해 AppCompatDelegate.setCompatVectorFromResourcesEnabled (true)를 통해 리소스 (23.2에서 발견 된 동작)에서 벡터 드로어 블을 다시 활성화하는 옵트 인 API를 추가했습니다. 그래도 메모리 사용에 문제가 발생할 수 있습니다. 구성 인스턴스를 업데이트하는 데 문제가 있으므로 기본적으로 비활성화되어 있습니다.

지금 사용 가능한 23.4.0 확인

업데이트 : 버전 23.3.0에서는 작동하지 않습니다 . 자세한 내용은 여기 를 확인 하세요 . 프록시 드로어 블이 작동하지 않습니다. app:srcCompat및 setImageResource()작업하지만.


벡터 드로어 블 지원은 버전 23.2 이상의 지원 라이브러리에서 사용할 수 있습니다. 그러나 이러한 드로어 블을 제대로 사용하려면 간접적으로 참조해야합니다.

첫 번째 단계는 AppCompat버전 을 높이는 것 입니다.

compile 'com.android.support:appcompat-v7:23.2.0'

두 번째로 Vector Drawable 지원을 활성화합니다. Gradle 플러그인을 사용하는 경우 2.0 이상

android {  
   defaultConfig {  
     vectorDrawables.useSupportLibrary = true  
   }  
}

그렇지 않으면

android {  
   defaultConfig {  
     generatedDensities = []  
   }  

   aaptOptions {  
     additionalParameters "--no-version-vectors"  
   }  
}

셋째 , 연결된 답변을 참조하십시오 .


네, 봤어요. 확장 된 정보에 감사드립니다. 나는 시스템 전체 물건 (알림, 위젯, ...)이 ... 물론 사용할 수 없습니다입니다 가정
— 안드로이드 개발자가

작동하는지 확인하십시오. 기본적으로 그 시점부터 드로어 블을 참조합니다. 시도해 보셨습니까? 이 예제는 벡터 드로어 블을으로 설정하여 MenuItem잘 작동합니다.
— razzledazzle

알림 및 위젯에서도 작동합니까? 이전 Android 버전에서 작동하도록 만드는 것에 대해 이야기하고 있습니다. 이를 위해 벡터를 어떻게 처리 할 수 ​​있습니까? 그들은 지원 라이브러리를 사용할 수 없습니다.
— 안드로이드 개발자

지원 라이브러리 버전 사용의 요점은 이전 버전에서 작동하도록하는 것입니다. 기록으로, 모든 API 11에서 API 7 방법 뒤로 애니메이션 벡터 드로어 블 작동
— razzledazzle

다시 말하지만, 이것은 앱 내에서 작동하지만 알림 및 위젯과 같이 외부에서 사용하려고하면 어떻게 될까요? 다른 앱 (런처)이 알림 표시 줄은 물론 지원 라이브러리를 사용하도록 만들 수 없다고 생각하기 때문에 작동하지 않을 것이라고 생각합니다. 시도해 보셨습니까?
— 안드로이드 개발자

12

이 지원 라이브러리를 사용해 볼 수 있습니다 . Lollipop에 도입 된 VectorDrawable 및 AnimatedVectorDrawable을 완전히 하위 호환성으로 지원합니다.


이 라이브러리는 API 레벨 14 이상과 만 호환되는 반면 Mr Vector 라이브러리는 7+까지 호환됩니다.
— donturner

@donturner : 귀하의 요점에 동의하지만 개발자가 아직 7 API 용 앱을 개발하고 있다고 생각하지 않습니다.
— V_J 2015 년

4
API 7이 아닐 수도 있지만 확실히 API 10 (Gingerbread)은 Android 시장의 4.1 %를 차지합니다 ( developer.android.com/about/dashboards/index.html ).
— donturner

8

여기에 몇 가지 답변을 보완하기 위해 예, VectorDrawables pre-Lollipop에 대한 지원을 최소한 부분적으로 받을 수 있습니다 .

얼마나 부분적입니까? 도움 이 되도록 이 다이어그램 을 만들었습니다 (지원 라이브러리 23.4.0에서 최소-25.1.0까지 유효 함).

VectorDrawable 치트 시트


사실,하지만 png 파일을 자동 생성하도록 허용하면 안전해야한다고 생각합니다.
— android developer

1
정확한 방식으로 설명했습니다.
— Abhijit Kurane

이것은 받아 들여진 대답이어야합니다. 감사.
— Justin Meiners

6

안타깝게도 현재 VectorDrawable 및 AnimatedVectorDrawable은 지원 라이브러리에서 사용할 수 없습니다. 그러나 Pre-Lollipop 버전에서이 기능을 사용하려면 MrVector라는 비공식 백 포트를 사용할 수 있습니다.

MrVector는 Github에서 사용할 수 있으며 Android 버전 7 이상을 지원합니다.

공식 Readme에서

MrVector 종속성을 추가하려면 build.gradle 종속성 블록에 다음 행을 추가하십시오.

compile 'com.telly:mrvector:0.2.0'

벡터 XML에서 드로어 블을 만들려면

Drawable drawable = MrVector.inflate(getResources(), R.drawable.vector_android);

도움이 되었기를 바랍니다.


1
MrVector는 지원 라이브러리의 일부가 될 다가오는 VectorDrawableCompat을 위해 며칠 전에 사용되지 않습니다.
— WindRider

정말 멋지다. 정보에 대해서 감사드립니다.
— gnuanu 2015-04-30

D : 예, 나는 약간의 지방이 엉덩이와 SVG의 내 응용 프로그램을 포주 기다릴 수 없다
— WindRider

1
더 이상 사용되지 않습니다. 대신 이 stackoverflow.com/a/30502261/1954675 를 사용하십시오 .
— V_J 2015

3

VectorDrawable을 사용하는 경우 Android Studio는 Pre-Lollipop 버전에 대한 PNG 파일 (XML 파일 기반)에 따라 자동으로 생성됩니다.

생성 된 PNG 파일은 21 미만의 API를 실행하는 장치에서 VectorDrawables 대신 BitmapDrawables로 간주되므로 해당 장치에서 애니메이션 또는 유사 할 수 없습니다.

자세한 내용은 "이전 버전과의 호환성"을 참조 하십시오. http://android-developers.blogspot.co.at/2015/09/android-studio-14.html


예, 최근에 게시되었습니다. 그러나 벡터를 사용하는 대신 PNG를 사용하므로 이미지를 보유하는 imageView의 크기를 변경하면 픽셀 화 / 흐리게됩니다.
— 안드로이드 개발자

@android 개발자 : 부분적으로 맞습니다. 이 동작이 발생하지만 VectorDrawables에 대해서도 동일합니다. 각 VectorDrawable에는 XML 내에 정의 된 너비와 높이가 있습니다 (예 : vector_drawable.xml). 이 너비 / 높이가 50x50dp로 설정되어 있지만 ImageView 크기를 100x100dp로 설정하면 Android 5.0을 실행하는 경우에도 결과가 여전히 흐려집니다 (따라서 자동 생성 된 BitmapDrawable 대신 VectorDrawable을 사용하고 있음). 일반적인 Bitmap에 비해 VectorDrawable의 실제 이점은 screen-dpi를 고려하여 4k 디스플레이에서도 흐려지지 않는다는 것입니다.
— Mehlyfication 2015-10-22

VectorDrawable이 설정되지 않은 크기를 사용할 때 잘 표시되지 않는다는 의미입니까? 하지만 벡터화 된 콘텐츠입니다 .... 왜 그렇지 않으면 작동할까요?
— 안드로이드 개발자

애니메이션 벡터 드로어 블에 대한 png도 생성합니까?
— Louis CAD

아니요,이 경우 PNG를 생성하지 않습니다. Android 5.0 이전의 Android 버전을 실행하는 장치에서 벡터 드로어 블에 애니메이션을 적용하려면 VectorDrawableCompat : developer.android.com/reference/android/support/graphics/…
— Mehlyfication 2017

3

Lollipop은 타사 라이브러리없이 SVG 파일을 처리 할 수 ​​없습니다.

내가 찾은 최고의 솔루션 은 SVG to VectorDrawable Converter 와 함께 BetterVectorDrawable lib 입니다.

BetterVectorDrawable 은 Android 5.0 이상에서 구성 가능한 대체 동작 이있는 Android 4.0 이상용 VectorDrawable 구현입니다.

SVG to VectorDrawable 변환기 는 SVG 이미지를 Android VectorDrawable XML 리소스 파일로 일괄 변환기입니다. 온라인 버전

링크는 lib 및 변환기 사용 방법에 대한 충분한 정보를 제공하는 readme를 가리 킵니다.


2

현재 지원 라이브러리에는 VectorDrawable이 없습니다.

Funkystein이 맞습니다. VectorDrawable은 SVG와 유사하며 Android가 성능에 집중할 수 있도록 수요가 가장 많은 벡터 드로잉 기능 만 지원합니다. 예를 들어 pathData는 SVG의 "d"문자열과 동일한 형식을 갖습니다.


따라서 이것은 Lollipop이 충분히 인기를 얻었을 때만 관련이 있으며 그 후에도 많은 기능을 제공하지 않습니다. :(
— android 개발자

새로운 벡터 API에 대한 튜토리얼 / 샘플 / 비디오를 알고 계십니까?
— 안드로이드 개발자


1

좋은 소식은 Google이 Android 지원 라이브러리 23.2 지원 벡터 드로어 블 및 애니메이션 벡터 드로어 블을 출시했다는 것입니다 !

그러나 Google 이전에이 라이브러리를 포팅 한 사람들에게 감사드립니다!

이것은 AppCompat 라이브러리가 훌륭한 곳이며 Android의 많은 새로운 기능을 훨씬 이전 버전으로 되돌릴 수 있습니다. 새로 구현 된 VectorDrawable 클래스를 통해 개발자는 이제 API 7 (Android 2.1 Eclair)까지 벡터 이미지를 사용할 수 있습니다. 애니메이션 벡터는 조금 더 제한적이며 API 11 (Android 3.0 Honeycomb)까지만 거슬러 올라갑니다.

사용 안내 :

@chrisbanes 의 " age-of-the-vectors " 를 참조하십시오.


1
좋은! 새로운 지원 라이브러리의 벡터 API를 사용하는 방법에 대한 샘플 / 튜토리얼을 공유해 주시겠습니까?
— 안드로이드 개발자

네! 이미 주말에 할 일 목록에 추가했습니다! :)
— LOG_TAG

1
감사합니다. 짧으면 여기에 적어주세요.
— 안드로이드 개발자
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.