2017-04-08 1 views
1

벡터 그리기 가능 애니메이션이 새롭습니다.있는 있습니다 알림 활성 아이콘 Vector Drawable.Vector Drawable에서 아이콘의 특정 부분에 애니메이션을 적용하는 방법은 무엇입니까?

알림 아이콘 벡터 패스 코드 : -

<vector xmlns:android="http://schemas.android.com/apk/res/android" 
android:width="140dp" 
android:height="140dp" 
android:viewportHeight="24.0" 
android:viewportWidth="24.0"> 
<path 
    android:fillColor="@color/dark_grey" 
    android:pathData="M7.58,4.08L6.15,2.65C3.75,4.48 2.17,7.3 2.03,10.5h2c0.15,-2.65 1.51,-4.97 3.55,-6.42zM19.97,10.5h2c-0.15,-3.2 -1.73,-6.02 -4.12,-7.85l-1.42,1.43c2.02,1.45 3.39,3.77 3.54,6.42zM18,11c0,-3.07 -1.64,-5.64 -4.5,-6.32L13.5,4c0,-0.83 -0.67,-1.5 -1.5,-1.5s-1.5,0.67 -1.5,1.5v0.68C7.63,5.36 6,7.92 6,11v5l-2,2v1h16v-1l-2,-2v-5zM12,22c0.14,0 0.27,-0.01 0.4,-0.04 0.65,-0.14 1.18,-0.58 1.44,-1.18 0.1,-0.24 0.15,-0.5 0.15,-0.78h-4c0.01,1.1 0.9,2 2.01,2z" /> 

에 아이콘은 벡터를 그릴 수 애니메이션을 사용하여 외부 링을 애니메이션을 적용 할이

enter image description here

처럼 될 것입니다. 제가 벡터 그리기 가능 애니메이션을 배울 수 있습니까?

답변

3

VectorDrawable 경로는 SVG paths과 동일한 구문을 사용합니다. 이 지침에 따라 경로가 왼쪽 및 오른쪽 링 파트를 먼저 추적 한 다음 본문 및 아래쪽 비트가 따라옵니다.

본체와 별도로 호출기에 애니메이션을 적용하려면 자체 경로로 분할하십시오.

<!-- The ringer --> 
<path 
    android:fillColor="@color/dark_grey" 
    android:pathData="M7.58,4.08L6.15,2.65C3.75,4.48 2.17,7.3 2.03,10.5h2c0.15,-2.65 1.51,-4.97 3.55,-6.42zM19.97,10.5h2c-0.15,-3.2 -1.73,-6.02 -4.12,-7.85l-1.42,1.43c2.02,1.45 3.39,3.77 3.54,6.42z" /> 
<!-- The body --> 
<path 
    android:fillColor="@color/dark_grey" 
    android:pathData="M18,11c0,-3.07 -1.64,-5.64 -4.5,-6.32L13.5,4c0,-0.83 -0.67,-1.5 -1.5,-1.5s-1.5,0.67 -1.5,1.5v0.68C7.63,5.36 6,7.92 6,11v5l-2,2v1h16v-1l-2,-2v-5zM12,22c0.14,0 0.27,-0.01 0.4,-0.04 0.65,-0.14 1.18,-0.58 1.44,-1.18 0.1,-0.24 0.15,-0.5 0.15,-0.78h-4c0.01,1.1 0.9,2 2.01,2z" /> 

그런 다음 우리는 애니메이터가 부착, 당신은 위치 또는 회전을 애니메이션을 적용 할 경우 <group>에 포장 할 수 있도록 그 부분에 이름을 지정해야합니다. 나는 회전을 위해 선회 축을 eyeballed.

<group android:name="ringer" android:pivotX="12" android:pivotY="10.5"> 
    <path 
     android:fillColor="@color/dark_grey" 
     android:pathData="M7.58,4.08L6.15,2.65C3.75,4.48 2.17,7.3 2.03,10.5h2c0.15,-2.65 1.51,-4.97 3.55,-6.42zM19.97,10.5h2c-0.15,-3.2 -1.73,-6.02 -4.12,-7.85l-1.42,1.43c2.02,1.45 3.39,3.77 3.54,6.42z" /> 
</group> 

이제 이것을 AnimatedVectorDrawable에 삽입하고 해당 그룹에 애니메이션을 첨부 할 수 있습니다.

<?xml version="1.0" encoding="utf-8"?> 
<animated-vector xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:aapt="http://schemas.android.com/aapt"> 
    <aapt:attr name="android:drawable"> 
     <vector android:width="140dp" android:height="140dp" 
      android:viewportWidth="24.0" android:viewportHeight="24.0"> 
      <group android:name="ringer" android:pivotX="12" android:pivotY="10.5"> 
       <path 
        android:fillColor="@color/dark_grey" 
        android:pathData="M7.58,4.08L6.15,2.65C3.75,4.48 2.17,7.3 2.03,10.5h2c0.15,-2.65 1.51,-4.97 3.55,-6.42zM19.97,10.5h2c-0.15,-3.2 -1.73,-6.02 -4.12,-7.85l-1.42,1.43c2.02,1.45 3.39,3.77 3.54,6.42z" /> 
      </group> 
      <path 
       android:fillColor="@color/dark_grey" 
       android:pathData="M18,11c0,-3.07 -1.64,-5.64 -4.5,-6.32L13.5,4c0,-0.83 -0.67,-1.5 -1.5,-1.5s-1.5,0.67 -1.5,1.5v0.68C7.63,5.36 6,7.92 6,11v5l-2,2v1h16v-1l-2,-2v-5zM12,22c0.14,0 0.27,-0.01 0.4,-0.04 0.65,-0.14 1.18,-0.58 1.44,-1.18 0.1,-0.24 0.15,-0.5 0.15,-0.78h-4c0.01,1.1 0.9,2 2.01,2z" /> 
     </vector> 
    </aapt:attr> 
    <target android:name="ringer"> 
     <aapt:attr name="android:animation"> 
      <objectAnimator 
       android:duration="50" 
       android:propertyName="rotation" 
       android:valueFrom="-15" 
       android:valueTo="15" 
       android:repeatCount="infinite" 
       android:repeatMode="reverse"/> 
     </aapt:attr> 
    </target> 
</animated-vector> 

당신이 그것을 실행할 때 당김에 Animatable2#start()를 호출하는 것을 잊지 마십시오.

+0

XML에서 보여지는 것과 같은 오류 '요소 애니메이션 벡터에 필요한 속성이 없습니다 android : drawable' – Yugesh

+0

@Yugesh IDE가 잘못되었으므로 컴파일되고 정상적으로 실행됩니다. IDE를 사용하려면 'aapt : attr'비트를 별도의 리소스 파일로 가져 와서 참조하는 속성을 작성하십시오. https://developer.android.com/guide/topics/resources/complex-xml-resources.html – ephemient

+0

을 참조하십시오. 애니메이션이 완료되면 원래 위치로 돌아 가지 않습니다. 원래 위치로 돌아갈 수있는 XML 속성 또는 애니메이션 완료 후 설정했습니다. – Yugesh

관련 문제