AnimatedVectorDrawable的简单使用

本篇是关于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的博客目前到这里就结束了,以后遇到什么在补充,谢谢大家长久的支持!!!

这是我的微信公众号,如果可以的话,希望您可以帮忙关注一下,这将是对我最大的鼓励了,谢谢!!

公众号

代码地址:
代码比较杂乱,就劳烦您自己提取了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值