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