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:srcCompatsetImageResource()작업하지만.


벡터 드로어 블 지원은 버전 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.