Android 벡터 그림 의 VectorDrawable 클래스 는 색 채 를 자 유 롭 게 채 웁 니 다.

2014 년 6 월 26 일 I/O 2014 개발 자 콘 퍼 런 스에 서 구 글 은 안 드 로 이 드 L 을 정식 출시 했 고 새로운 디자인 언어 인 Material Design 을 가 져 왔 으 며 새로운 API 도 이런 종류의 VectorDrawable 을 제공 했다.안 드 로 이 드 가 SVG 형식 을 지원 하 는 자원,즉 벡터 그림 입 니 다.벡터 그림 을 생각하면 자연히 비트 맵 이 떠 오 릅 니 다.벡터 그림 이 무엇 이 고 비트 맵 이 무엇 입 니까?먼저 비트 맵 을 말씀 드 리 겠 습 니 다.우리 가 자주 사용 하 는 png,jpg 는 비트 맵 입 니 다.그 는 한 단원 의 한 단원 의 픽 셀 로 구성 되 어 있 습 니 다.작은 아이콘 이 대형 스크린 핸드폰 을 만 났 을 때 아이콘 이 열 리 면 모자이크 와 같다.우리 가 원 하 는 게 아니 야.벡터 그래프 는 정식으로 그것 과 상반 된다.벡터 그림 은 점,선,사각형,원,포물선 등 으로 구성 되 어 있 으 며 왜곡 되 지 않 고 파일 의 저장 공간 을 줄인다.간단 한 icon 을 배 웠 습 니 다.우리 가 직접 그 릴 뿐만 아니 라 더욱 아름 답 습 니 다.Material Design 디자인 에 부합 되 는데 왜 기꺼이 하지 않 겠 습 니까?
콘 셉 트
그렇게 많은 말 을 했 는데 도 홈 페이지 에서 어떻게 묘 사 했 는 지 보 자.
xml 정의탭 에 자신의 벡터 그림 을 그립 니 다.
이렇게 간단 한 한 마디.
사용법
는 우리 가 자신의 벡터 그림 을 그 릴 수 있 도록 많은 요 소 를 포함 하고 있 습 니 다.다음은 두 가지 예 를 들 어 사용 하 겠 습 니 다.여기 바로 홈 페이지 의 예 를 들 어 공부 하 겠 습 니 다.
1.삼각형 을 그 려 다음 그림 을 그린다.
这里写图片描述
먼저 vectorrdrawable.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>

기본 구 조 는 바로 이 렇 습 니 다.우 리 는 그 가 두 개의 너비 와 높이 설명 을 가지 고 있 는 것 을 볼 수 있 습 니 다.안 드 로 이 드:height 와 안 드 로 이 드:height 는 모든 사이즈 유닛 을 지원 합 니 다.보통 우 리 는 dp 를 사용 합 니 다.이것 은 벡터 그림 의 너비 와 높이 를 말 합 니 다.android:viewportWidth 와 android:viewportHeight 는 64dp 에서 600 개의 점 을 좌표 로 하여 아래 의 도형 을 그 리 는 것 으로 이해 할 수 있 습 니 다.그 다음 에 우 리 는라벨 을 볼 수 있 습 니 다.이것 은 주로 아래 path 에 그 려 진 전체 부분 을 위 한 작업 입 니 다.예 를 들 어 축 심(300,300)으로 시계 반대 방향 으로 45 도 이동 하거나태그 name 속성 을 통 해 애니메이션 작업 을 할 수 있 습 니 다.android:pivotX 와 android:pivoty 는 축 심 x,y 축 을 가리킨다.바깥 의 전체 구조 가 있 습 니 다.다음은탭 을 통 해 전체적인 그리 기 명령 입 니 다.우선 path 의 이름 입 니 다.이 이름 이 있 으 면 어떤 path 애니메이션 을 가리 킬 수 있 습 니까?android:fillColor 는 폐쇄 된 도형 블록의 구체 적 인 색 을 가리킨다.그리고 android:pathData 는 그리 기 명령 을 말 합 니 다.다음 그림 과 결합 하여 그리 기 명령 을 배 웁 니 다:
常用绘制命令
대문자 절대 소문 자 상대 매개 변수 에 쉼표 를 붙 이 고 canvas 와 그리 기 차이 가 많 지 않 습 니 다.마지막 A,rx 와 ry 는(x,y)를 축 으로 하 는 x 축 과 y 축의 반지름 을 말 합 니 다.x-rotation 은 x 축 회전 각 도 를 말 합 니 다.large-arc-flag 는 0 일 때 작은 호 도 를 나타 내 고 1 시 에 큰 호 도 를 취하 고 sweep-flag 0 은 시계 반대 방향 을 취하 고 1 은 시계 방향 을 따 릅 니 다.아래 그림 과 결합 하여 이해 하 다.
这里写图片描述
여기에 large-arc-flag=0,sweep-flag=0 으로 path 를 써 서 진정한 효 과 를 보십시오.코드 는 다음 과 같 습 니 다.

 <path
      android:name="v"
      android:strokeColor="#000000"
      android:strokeWidth="2"
      android:pathData="A 10 10 0 0 0 100 200"
      />
효과 맵 생 성:
这里写图片描述
위 에서 말 한 것 과 같 죠!
2.하트 모양 을 그 려 주세요.
这里写图片描述
코드 는 다음 과 같 습 니 다:

<?xml version="1.0" encoding="utf-8"?>
<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>

위 와 유사 합 니 다.주로 android:pathData 가 바 뀌 었 습 니 다.(20.5,9.5)부터 시작 해서 그 다음 에 뒤에 베 세 르 곡선 을 그 리 는 것 이다.상대 적 으로 출발점 의 수평 은 왼쪽으로 1.955 이동 하고 수직 으로 움 직 이지 않 으 면 한 점 을 확정 한 다음 에 출발점 의 수평 에 비해 왼쪽으로-3.83 이동 하고 수직 으로 아래로 1.268 이동 하여 한 점 을 확정 한 다음 에 출발점 의 수평 에 비해 왼쪽으로 4.5 이동 하고 수직 으로 아래로 3 이동 하여 한 점 을 확인한다.이 세 점 을 통 해 베 세 르 곡선 을 그 리 며 아래 의 유사 한 원 리 를 그린다.
ps:간단 한 명령 을 알 았 습 니 다.그러면 svg 이렇게 많은 명령,안 드 로 이 드 에 이렇게 많은 icon 이 있 는데 자신 이 그 릴 수 없 잖 아 요.우 리 는 어떻게 이런 명령 을 배우 고 이런 icon 을 그 릴 수 있 습 니까?다행히 학습 명령 은 안 드 로 이 드:path 규칙 으로 icon 의 pathData 데 이 터 를 그 릴 수 있 습 니 다.이렇게 하면 우 리 는 자신 이 원 하 는 데 이 터 를 그 릴 수 있다.
ImageView 배경 에 어떻게 쓰 죠?간단 합 니 다.아래 코드 를 보 세 요.
activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  xmlns:app="http://schemas.android.com/apk/res-auto">
  <ImageView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    app:srcCompat="@drawable/vectordrawable" />
</LinearLayout>
이런 효 과 를 볼 수 있 지 않 을 까?운행 하 세 요.효 과 는 위 하트 와 같 습 니 다.그리고 그의 크기 를 바 꿔 보 세 요.사실은 그 는 변형 되 지 않 습 니 다.
벡터 애니메이션 AnimatedVectorDrawable
홈 페이지 데모 로 테스트 하 겠 습 니 다.
새 xml 파일 vectordrawable.xml,drawable 에 넣 으 면 코드 는 다음 과 같 습 니 다.

<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>
그리고 xml 파일 vector 을 새로 만 듭 니 다.drawable_anim.xml,AnimatedVectorDrawable 이 support:appcompat-v7:23.3 에서 android L(5.0)이상 호 환 되 기 때 문 입 니 다.그래서 우 리 는 drawable-v21 폴 더 에 놓 았 습 니 다.코드 는 다음 과 같 습 니 다.

<animated-vector xmlns:android="http://schemas.android.com/apk/res/android"
  android:drawable="@drawable/vector_drawable" >
  <target
    android:name="rotationGroup"
    android:animation="@anim/rotation" />
  <target
    android:name="v"
    android:animation="@anim/path_morph" />
</animated-vector>
여기 안 드 로 이 드:drawable,vector 를 지정 해 야 합 니 다.drawable_anim.xml 파일 을 사용 한 다음 group 의 name 이나 path 의 name 에 따라 애니메이션 설정 을 합 니 다.지정 한 애니메이션 은 각각 rotation 과 path 입 니 다.morph
새 rotation 과 pathmorph 두 애니메이션 은 anim 폴 더 에 놓 여 있 습 니 다.코드 는 다음 과 같 습 니 다.
rotation.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
  <objectAnimator
    android:duration="6000"
    android:propertyName="rotation"
    android:valueFrom="0"
    android:valueTo="360" />
</set>
path_morph.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <objectAnimator
      android:duration="3000"
      android:propertyName="pathData"
      android:valueFrom="M300,70 l 0,-70 70,70 0,0  -70,70z"
      android:valueTo="M300,70 l 0,-70 70,0 0,140 -70,0 z"
      android:valueType="pathType"/>
</set>
그리고 5.0 이하 activitymain.xml,layot 아래 에 놓 기:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  xmlns:app="http://schemas.android.com/apk/res-auto">
  <ImageView
    android:id="@+id/image_view"
    android:layout_width="400dp"
    android:layout_height="400dp"
    app:srcCompat="@drawable/vector_drawable"/>
</LinearLayout>
그리고 5.0 이상 activitymain.xml,layot-v21 폴 더 아래 에 놓 기:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  xmlns:app="http://schemas.android.com/apk/res-auto">
  <ImageView
    android:id="@+id/image_view"
    android:layout_width="400dp"
    android:layout_height="400dp"
    app:srcCompat="@drawable/vector_drawable_anim" />
</LinearLayout>
마지막 으로 MainActivity 코드 추가:

 ImageView imageView = (ImageView) findViewById(R.id.image_view);
    Drawable drawable = imageView.getDrawable();
    //AnimatedVectorDrawableCompat   Animatable  
    if (drawable instanceof Animatable){
      ((Animatable) drawable).start();
    }
그리고 우 리 는 5.0 이하 에서 애니메이션 효 과 를 가지 지 않 고 운행 한다.효 과 는 위의 삼각형 효과 그림 과 같 습 니 다.여기 서 5.0 이상 의 효 과 를 보 겠 습 니 다.
这里写图片描述
이렇게 해서 우 리 는 간단 한 애니메이션 을 실현 했다.
참고 글:어떻게 안 드 로 이 드 벡터 그림 VectorDrawable 을 돌 립 니까?
소스 코드 내리 치기:VectorDrawable 클래스 자 유 롭 게 색 채 우기
이상 은 본 고의 모든 내용 입 니 다.여러분 이 안 드 로 이 드 소프트웨어 프로 그래 밍 을 배 우 는 데 도움 이 되 기 를 바 랍 니 다.

좋은 웹페이지 즐겨찾기