本篇是关于Drawable的第十四篇博客,也是drawable的最后一篇博客了,虽然还有几个drawable,但是已经不打算继续写下去了。下一个系列将是Android动画方面的内容,希望大家可以关注一下。
AnimatedVectorDrawable的使用需要配合动画和VectorDrawable使用,算是几个Drawable中最复杂的一个了,但是可以实现很酷的动画,在这里演示的动画当然很low噢(不要喷我呀)。
还是老规矩,先看一下效果图然后在看代码:
首先vector_drawable.xml文件:
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="200dp"
android:height="200dp"
android:viewportHeight="100"
android:viewportWidth="100">
<group
android:name="group">
<path android:name="tangle"
android:strokeColor="@color/colorAccent"
android:strokeWidth="2"
android:pathData="M 0,0 L50,100 L100,0Z"/>
</group>
</vector>
关于VectorDrawable还有什么不清楚的,请看我的博客,其中有一篇就是介绍VectorDrawable的,谢谢!这里我就再介绍了!!
animated_vector_drawable.xml文件:
<?xml version="1.0" encoding="utf-8"?>
<animated-vector xmlns:android="http://schemas.android.com/apk/res/android"
android:drawable="@drawable/vector_drawable">
<target
android:animation="@anim/anim_vector"
android:name="tangle"/>
<target
android:animation="@anim/anim_group"
android:name="group"/>
</animated-vector>
两个动画,一个是scale动画,还有一个是针对pathData做的动画。
先看scale动画:
anim_group.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<objectAnimator
android:duration="5000"
android:propertyName="scaleX"
android:repeatCount="infinite"
android:repeatMode="reverse"
android:valueFrom="1"
android:valueTo="0.5"
android:valueType="floatType" />
<objectAnimator
android:duration="5000"
android:propertyName="scaleY"
android:repeatCount="infinite"
android:repeatMode="reverse"
android:valueFrom="1"
android:valueTo="0.5"
android:valueType="floatType" />
</set>
看一下pathData做的动画:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<objectAnimator
android:duration="5000"
android:propertyName="pathData"
android:repeatCount="infinite"
android:repeatMode="reverse"
android:valueFrom="M 0,0 L50,100 L100,0Z"
android:valueTo="M 0,100 L50,0 L100,100Z"
android:valueType="pathType" />
</set>
主布局文件:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main"
android:layout_width="match_parent" android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.animatedvetectordrawable.MainActivity">
<ImageView
android:layout_width="200dp"
android:layout_height="200dp"
android:id="@+id/iv"
android:layout_centerHorizontal="true"
android:src="@drawable/animated_vector_drawable"/>
<Button
android:layout_below="@id/iv"
android:onClick="startVectorAnimation"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/start_animation"/>
</RelativeLayout>
Java文件:
package com.example.animatedvetectordrawable;
import android.graphics.drawable.AnimatedVectorDrawable;
import android.graphics.drawable.Drawable;
import android.provider.ContactsContract;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.ImageView;
public class MainActivity extends AppCompatActivity {
private ImageView iv;
private Drawable drawable;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
iv = (ImageView)findViewById(R.id.iv);
}
public void startVectorAnimation(View view){
drawable = iv.getDrawable();
if (drawable instanceof AnimatedVectorDrawable){
Log.i("zyq","start");
((AnimatedVectorDrawable) drawable).start();
}
}
}
真是开始一个动画的时候也很简单,直接调用start的方法就可以直接开始一个动画。
主要介绍一下animated_vector_drawable这个文件,他有两个标签,跟标签表明这是一个AnimatedVectorDrawable,里面的drawable属性值指定了drawable的对象,子标签中的traget标签用于关联动画和动画作用的对象,在使用VectorDrawable的使用,无论是group还是path我们都给它起了一个名字,名字就是在这里使用的,通过名字与动画管理起来,有兴趣的可以自己尝试一下,这样印象更加深刻。
其他的就没什么好说的了,关于动画的方面将在Android的动画系列里进行详细描述,这里不就多说了,谢谢!!!
关于Drawable的博客目前到这里就结束了,以后遇到什么在补充,谢谢大家长久的支持!!!
这是我的微信公众号,如果可以的话,希望您可以帮忙关注一下,这将是对我最大的鼓励了,谢谢!!
代码地址:
代码比较杂乱,就劳烦您自己提取了