Android自定义view教程02-------------Android的Tween动画和 属性动画 详解

实际上tween动画是比较简单的,我们要实现的很多动画基本上都是基于tween动画来做。

属性动画就比较复杂,今天主要是讲一下tween和属性动画的区别,后面还会有专门一个章节

来讲解属性动画,因为属性动画 实在是非常炫酷~~

 

 1 package com.example.donghuatest;
 2 
 3 import android.animation.ObjectAnimator;
 4 import android.app.Activity;
 5 import android.os.Bundle;
 6 import android.view.View;
 7 import android.widget.ImageView;
 8 
 9 public class MainActivity extends Activity {
10 
11     /**
12      * tweeen动画
13      */
14     // 透明度变化
15     // private Animation alphaAnimation = new AlphaAnimation(1.0f, 0.0f);
16 
17     // 旋转动画
18     // private Animation alphaAnimation = new RotateAnimation(0f, 360f);
19 
20     // 尺寸也就是大小变换 动画
21     // private Animation alphaAnimation = new ScaleAnimation(0.1f, 1.0f, 0.1f,
22     // 1.0f);
23 
24     // 位移动画
25     // private Animation alphaAnimation = new TranslateAnimation(0.1f, 100f,
26     // 0.1f,
27     // 100f);
28 
29     /**
30      * 以上都是属于view的动画 只能用于view对象 比如支持旋转啊 透明度啊 但是不支持背景色变化 也可以设置interpolator 的属性
31      * 来改变 动画渐变的方式。比如AccelerateInterpolator. interpolator
32      * 这个东西其实就是改变动画变化的速率之类的,可以自定义 看下源码就知道。android 自带了很多种interpolator。
33      * 
34      * 
35      * 
36      */
37 
38     /**
39      * 下面都是属性动画了 这个就可以改变view的实际属性了,tween的话就不行,举个例子 我们tween动画放大一个view的时候
40      * 
41      * 实际上这个view的点击区域还是原来变化之前那边一点 并不会随着view的大小而变化,但是属性动画 Property Animation 就
42      * 
43      * 可以实际改变 view的属性了,而且属性动画 不仅可以用于view 还可以用于对象~~
44      * 
45      * 
46      */
47 
48     //比较简单的属性动画
49     private ObjectAnimator alphaAnimation = new ObjectAnimator();
50 
51     private ImageView imageView;
52 
53     @Override
54     protected void onCreate(Bundle savedInstanceState) {
55         super.onCreate(savedInstanceState);
56         setContentView(R.layout.activity_main);
57 
58         // imageView = (ImageView) this.findViewById(R.id.iv);
59         // // imageView.setAnimation(alphaAnimation);
60         // imageView.setOnClickListener(new View.OnClickListener() {
61         //
62         // @Override
63         // public void onClick(View v) {
64         // // alphaAnimation.setDuration(2000);
65         // // imageView.startAnimation(alphaAnimation);
66         //
67         // }
68         // });
69 
70         // 下面是属性动画的代码
71         // 注意为什么imageView.setAnimation 在这里没用 startAnimation 在属性动画里也没用
72         // 实际上属性动画 是继承自Animator 这个类 不是Animation 所以是无法set的
73         imageView = (ImageView) this.findViewById(R.id.iv);
74 
75         imageView.setOnClickListener(new View.OnClickListener() {
76 
77             @Override
78             public void onClick(View v) {
79                 // TODO Auto-generated method stub
80                 alphaAnimation//
81                         .ofFloat(v, "rotationY", 0.0F, 360.0F)//
82                         .setDuration(500)//
83                         .start();
84             }
85         });
86 
87     }
88 
89     
90 }

 

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    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.donghuatest.MainActivity" >

    <ImageView
        android:id="@+id/iv"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@drawable/ic_launcher" >
    </ImageView>

</RelativeLayout>

 

代码主要的都注释掉了,要理解什么就自己去掉注释即可。 基本上就是要意识到 做简单动画效果的时候

是用fream和tween 动画来做,动画的变化速率则要用interpolator 来做。而做复杂动画的时候 就需要用属性动画了。

属性动画下面一章会单独拿出来 大篇幅来讲。一个志在自定义复杂view的coder,一定要理解好属性动画.

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。