Android属性动画简单剖析

运行效果图:

先看布局文件吧,activity_main.xml:

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3     xmlns:tools="http://schemas.android.com/tools"
 4     android:layout_width="match_parent"
 5     android:layout_height="match_parent"
 6     tools:context="com.example.administrator.animatordemo.MainActivity">
 7
 8     <ImageView
 9         android:id="@+id/iv_icon"
10         android:layout_width="wrap_content"
11         android:layout_height="wrap_content"
12         android:layout_marginLeft="10dp"
13         android:layout_marginTop="10dp"
14         android:scaleType="centerCrop"
15         android:src="@mipmap/ic_launcher_round" />
16
17     <LinearLayout
18         android:layout_width="wrap_content"
19         android:layout_height="wrap_content"
20         android:layout_alignParentBottom="true"
21         android:layout_centerHorizontal="true"
22         android:orientation="vertical">
23
24         <Button
25             android:id="@+id/btn_click1"
26             android:layout_width="wrap_content"
27             android:layout_height="wrap_content"
28             android:layout_centerInParent="true"
29             android:layout_gravity="center"
30             android:text="startAnimator1" />
31
32         <Button
33             android:id="@+id/btn_click2"
34             android:layout_width="wrap_content"
35             android:layout_height="wrap_content"
36             android:layout_centerInParent="true"
37             android:layout_gravity="center"
38             android:text="startAnimator2" />
39
40         <Button
41             android:id="@+id/btn_click3"
42             android:layout_width="wrap_content"
43             android:layout_height="wrap_content"
44             android:layout_centerInParent="true"
45             android:layout_gravity="center"
46             android:text="startAnimator3" />
47
48     </LinearLayout>
49
50 </RelativeLayout>

然后看JAVA代码,MainActivity.java:

 1 package com.example.administrator.animatordemo;
 2
 3 import android.animation.AnimatorSet;
 4 import android.animation.ObjectAnimator;
 5 import android.animation.PropertyValuesHolder;
 6 import android.os.Bundle;
 7 import android.support.v7.app.AppCompatActivity;
 8 import android.view.View;
 9 import android.widget.Button;
10 import android.widget.ImageView;
11
12 public class MainActivity extends AppCompatActivity implements View.OnClickListener {
13
14     private Button btn_click1;
15     private Button btn_click2;
16     private Button btn_click3;
17     private ImageView iv_icon;
18
19     @Override
20     protected void onCreate(Bundle savedInstanceState) {
21         super.onCreate(savedInstanceState);
22         setContentView(R.layout.activity_main);
23         initView();
24     }
25
26     private void initView() {
27         iv_icon = (ImageView) findViewById(R.id.iv_icon);
28         btn_click1 = (Button) findViewById(R.id.btn_click1);
29         btn_click1.setOnClickListener(this);
30         btn_click2 = (Button) findViewById(R.id.btn_click2);
31         btn_click2.setOnClickListener(this);
32         btn_click3 = (Button) findViewById(R.id.btn_click3);
33         btn_click3.setOnClickListener(this);
34     }
35
36     @Override
37     public void onClick(View v) {
38         switch (v.getId()) {
39             case R.id.btn_click1:
40                 startAnimator1();//这样写,三个动画会同时执行
41                 break;
42             case R.id.btn_click2:
43                 startAnimator2();//效果同startAnimator1()一致,要是和第一种相比较,更推荐此方法
44                 break;
45             case R.id.btn_click3:
46                 startAnimator3();
47                 break;
48         }
49     }
50
51     /**
52      * 旋转动画:rotation
53      * 水平动画:translationX
54      * 垂直动画:translationY
55      */
56     private void startAnimator1() {
57         ObjectAnimator.ofFloat(iv_icon, "rotation", 0F, 200F).setDuration(1000).start();
58         ObjectAnimator.ofFloat(iv_icon, "translationX", 0F, 200F).setDuration(1000).start();
59         ObjectAnimator.ofFloat(iv_icon, "translationY", 0F, 200F).setDuration(1000).start();
60     }
61
62     private void startAnimator2() {
63         PropertyValuesHolder p1 = PropertyValuesHolder.ofFloat("rotation", 0F, 200F);
64         PropertyValuesHolder p2 = PropertyValuesHolder.ofFloat("translationX", 0F, 200F);
65         PropertyValuesHolder p3 = PropertyValuesHolder.ofFloat("translationY", 0F, 200F);
66         ObjectAnimator.ofPropertyValuesHolder(iv_icon, p1, p2, p3).setDuration(1000).start();//第一个参数是控件对象,后面参数是可变长数组
67     }
68
69     private void startAnimator3() {
70         ObjectAnimator animator1 = ObjectAnimator.ofFloat(iv_icon, "rotation", 0F, 200F);
71         ObjectAnimator animator2 = ObjectAnimator.ofFloat(iv_icon, "translationX", 0F, 200F);
72         ObjectAnimator animator3 = ObjectAnimator.ofFloat(iv_icon, "translationY", 0F, 200F);
73         AnimatorSet set = new AnimatorSet();
74 //        set.playTogether(animator1, animator2, animator3);//三个动画同时执行
75         set.playSequentially(animator1, animator2, animator3);//三个动画按顺序执行
76         set.setDuration(1000);
77         set.start();
78     }
79 }

说明一下,在startAnimator3()这个方法当中,AnimatorSet集合除了playTogether和playSequentially两个方法外,还有play方法。比如它可以这样使用:

set.paly(animator2).with(animator3);
set.play(animator1).after(animator2);

这种效果的话,则是会先进行“水平动画和垂直动画”同时执行,然后再执行旋转动画。通过with(),after(),甚至还有before()方法这样一些方法,我们就可以做到这样一个属性集合详细的顺序处理。

是不是强大的功能呢?这种方式,也是属性动画里面使用最多的一种方式。

时间: 2024-08-09 10:44:11

Android属性动画简单剖析的相关文章

Android属性动画ValueAnimator源码简单分析

Android开发的过程中经常要用到属性动画,经常都是网上扒下来看下怎么用,但是经常不知道为什么要这么用,手一哆嗦一不小心就点到源码里面去了.我们就来看看Android属性动画ValueAnimator类源码的简单实现,从而对ValueAnimator类有个大概的了解. 在Android开发过程中做动画效果的时候用到ValueAnimator的时候最简单的方法我们是这么干的 // ValueAnimator ValueAnimator valueAnimator = ValueAnimator.

Android属性动画AnimatorSet源码简单分析

跟上之前的两篇文章 Android属性动画ValueAnimator源码简单分析 Android属性动画ObjectAnimator源码简单分析 继续看AnimatorSet源码的大概过程. AnimatorSet 提供了一种把多个动画放到一起,按照某种特定的顺序来播放,比如一个接一个的播放或者多个动画一起播放. AnimatorSet简单使用随便举一个最简单的例子 //AnimatorSet AnimatorSet animSet = new AnimatorSet(); ObjectAnim

【转】android 属性动画之 ObjectAnimator

原文网址:http://blog.csdn.net/feiduclear_up/article/details/39255083 前面一篇博客讲解了 android 简单动画之 animtion,这里来讲解一下android 3.0之后添加的一些动画   animator 中的 ObjectAnimator . 属性动画概念: 所谓属性动画:改变一切能改变的对象的属性值,不同于补间动画:只能改变 alpha,scale,rotate,translate.听着有点抽象,举例子说明 补间动画能实现的

Android属性动画初步学习笔记

近期学习Android属性动画和VetcorDrawable实现属性动画,以此记录一下学习笔记. 首先是属性动画,小白没截过动态图,方三张静态图吧       效果是点击红色图片,7个选项以属性动画的方式弹出并旋转,最后成一个1/4圆弧排列,再次点击则收回到红色原点下. 布局文件很简单,就是一个RelativeLayout下八个ImageView: 1 <?xml version="1.0" encoding="utf-8"?> 2 <Linear

Android 属性动画(Property Animation) 完全解析 (上)

转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/38067475 1.概述 Android提供了几种动画类型:View Animation .Drawable Animation .Property Animation .View Animation相当简单,不过只能支持简单的缩放.平移.旋转.透明度基本的动画,且有一定的局限性.比如:你希望View有一个颜色的切换动画:你希望可以使用3D旋转动画:你希望当动画停止时,View的

Android属性动画之ValueAnimation

ValueAnimation是ObjectAnimation类的父类,经过前几天的介绍,相信大家对ObjectAnimation有了 一定的认识,今天就为大家最后介绍一下ValueAnimation,ValueAnimation谷歌提供了更好的过程控制,现在就以一个类计时的小动画为大家简单介绍一下: 应用的布局文件非常简单,只有一个Button按钮,就不再赘述了.下面重点介绍一下具体的实现: public void init() { button = (Button) findViewById(

Android 属性动画(Property Animation) 完全解析 (下)

转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/38092093 上一篇Android 属性动画(Property Animation) 完全解析 (上)已经基本展示了属性动画的核心用法: ObjectAnimator实现动画,ValueAnimator实现动画,AnimatorSet的使用等~ 当然了属性动画还有一部分的知识点,也能做出很不错的效果,将在本篇博客为您展示~ 1.如何使用xml文件来创建属性动画 大家肯定都清楚,

Android属性动画之ValueAnimator的介绍

之前两篇博客,介绍的是ObjectAnimator作用与某一个控件的某一个属性.但我们的ValueAnimator它本身并不会作用与任何一个属性,它本身也不会提供任何一种动画.它简单的来说,就是一个数值发生器,它可以产生你想要的各种数值.其实,在Android属性动画中,如何产生每一步具体实现动画效果,都是通过ValueAnimator计算出来的. 比如我们现在要实现一个从0~100的位移动画,ValueAnimator会根据动画持续的总时间产生一个0~1时间因子,有了这样一个时间因子.通过相应

Android属性动画完全解析(下),Interpolator和ViewPropertyAnimator的用法

转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/44171115 大家好,欢迎继续回到Android属性动画完全解析.在上一篇文章当中我们学习了属性动画的一些进阶技巧,包括ValueAnimator和ObjectAnimator的高级用法,那么除了这些之外,当然还有一些其它的高级技巧在等着我们学习,因此本篇文章就对整个属性动画完全解析系列收个尾,来学习一下剩下的非常重要的高级技巧. 另外,本篇文章中使用的代码是建立在上篇文章基础之