vector image scaling in android

기존 이미지에 viewpager를 통한 slide 효과를 주었더니,

 

생각지도 못한 문제가 발생했다.

 

 

이미지 전환이 상당히 느렸다. 버버버벅….

 

이건 또 뭐야;;; 이제 이미지만 새로 작업하면 기능이 끝난 줄 알았는데,

 

페이지를 넘기던 우리 딸이 애니메이션 효과가 없으니 심심해 하는 것 같아서 넣었더니

 

배보다 배꼽이 더 크게 생겼다. 어헐…

 

 

왜 버벅이는지 찾아내기 위해 적용한 media player도 tts도 다 걷어냈지만 여전히 버버벅

 

결국 이미지 밖에 없어서 테스트 해보니 png 이미지가 문제. xxhdip로 해상도를 해놨으니 얼마나 무거웠을까.

 

 

기존에 이미지 작업 시에는 문제 없었는데 slide 효과 주면서 아마도 메모리 사용량에 무리가 간 것일 거라 추측을…

 

이미지를 줄이려고 보니, vector로 해야겠고.. pixabay에서 무료 svg 이미지를 새로 다운 받았다.

 

  1. android studio vector asset

 

project -> right click -> new -> vector asset click

%e1%84%89%e1%85%b3%e1%84%8f%e1%85%b3%e1%84%85%e1%85%b5%e1%86%ab%e1%84%89%e1%85%a3%e1%86%ba-2016-09-25-%e1%84%8b%e1%85%a9%e1%84%8c%e1%85%a5%e1%86%ab-4-52-56

 

2. auto change svg to xml

svg파일을 drawable에 xml로 변환 저장한다.

%e1%84%89%e1%85%b3%e1%84%8f%e1%85%b3%e1%84%85%e1%85%b5%e1%86%ab%e1%84%89%e1%85%a3%e1%86%ba-2016-09-25-%e1%84%8b%e1%85%a9%e1%84%8c%e1%85%a5%e1%86%ab-4-53-19

 

3. getDrawable로 vector를 불러왔다.

Drawable drawable = getActivity().getResources().getDrawable(R.drawable.elephant);

Screenshot_2016-09-25-03-48-52.png

결과가 이렇다. 벡터를 가져오긴 했는데 작은 사이즈 그대로

 

4. src 수정

 

  • layout xml
<ImageView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:scaleType="fitXY"
    android:id="@+id/flashcard_img"
    android:layout_marginBottom="120dp"
    android:layout_marginTop="30dp"
    android:layout_centerHorizontal="true" />

 

  • gradle 추가

min version up, add supportlibrary

defaultConfig {
    minSdkVersion 21
    vectorDrawables.useSupportLibrary = true
}

 

drawable로 변경해야하는 줄 알았는데

Uri imgPath = Uri.parse("android.resource://" + getActivity().getPackageName() + "/drawable/" + eng);
mImgView.setImageURI(imgPath);

 

로도 잘 동작 하는 듯.

Screenshot_2016-09-25-05-05-47.png

 

https://code.google.com/p/android/issues/detail?id=202019

http://stackoverflow.com/questions/34936590/why-isnt-my-vector-drawable-scaling-as-expected

 

 

 

 

알 수 없음의 아바타

글쓴이: woori

ENFJ

댓글 남기기

이 사이트는 스팸을 줄이는 아키스밋을 사용합니다. 댓글이 어떻게 처리되는지 알아보십시오.