Android提供了三种动画机制:View Animation,Drawable Animation,Property Animation;其中View Animation是最简单的只支持
透明度改变,缩放,平移,旋转基本动画,以及AnimationSet视图动画集合;
实现原理是:View所在的父控件ViewGroup在drawChild()函数中获取View的Animation的Transformation值,
然后调用canvas.concat(transformToApply.getMatrix()),通过矩阵运算完成动画帧。如果动画没有完成,就继续调用invalidate()函数。
启动下次驱动动画,从而完
成动画的绘制。视图动画有一个缺点就是不具备交互性,当控件发生动画后,其响应事件位置依然在动画前的位置。
下面是视图动画应用的范例:
1,透明度的变化:res/anim/alpha
<?xml version="1.0" encoding="utf-8"?>
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
android:fromAlpha="1.0"
android:toAlpha="0"
android:duration="2000"
android:fillBefore="true"
android:interpolator="@android:anim/linear_interpolator">
</alpha>
2,缩放:res/anim/scale
<?xml version="1.0" encoding="utf-8"?>
<scale xmlns:android="http://schemas.android.com/apk/res/android"
android:fromXScale="1.0"
android:toXScale="0.5"
android:fromYScale="1.0"
android:toYScale="0.5"
android:pivotX="50%"
android:pivotY="50%"
android:interpolator="@android:anim/linear_interpolator"
android:fillBefore="true"
android:duration="200">
</scale>
3,平移:res/anim/translate
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:fromXDelta="0"
android:toXDelta="100%"
android:fromYDelta="0"
android:toYDelta="0"
android:duration="2000"
android:fillBefore="true"
android:interpolator="@android:anim/linear_interpolator">
</translate>
4,旋转:res/anim/rotate
<?xml version="1.0" encoding="utf-8"?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
android:fromDegrees="0"
android:toDegrees="180"
android:pivotX="50%"
android:pivotY="50%"
android:duration="2000"
android:interpolator="@android:anim/linear_interpolator"
android:fillBefore="true">
</rotate>
调用代码:
package com.example.getmynumber.activity.animator;
import com.example.getmynumber.R;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.ImageView;
public class DrawableAnimActivity extends Activity{
private ImageView iv_aa;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_drawable_anim);
initView();
registerListener();
}
private void registerListener() {
iv_aa.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Animation anim=AnimationUtils.loadAnimation(DrawableAnimActivity.this, R.anim.rotate);
iv_aa.startAnimation(anim);
}
});
}
private void initView() {
iv_aa=(ImageView) findViewById(R.id.iv_aa);
}
}
视图动画集合的使用:
AnimationSet animSet = new AnimationSet(true);
animSet.setDuration(1000);
AlphaAnimation alpha = new AlphaAnimation(0, 1);
alpha.setDuration(1000);
animSet.addAnimation(alpha);
TranslateAnimation translate = new TranslateAnimation(0, 100, 0, 200);
translate.setDuration(1000);
animSet.addAnimation(translate);
view.startAnimation(animSet);
Android -animation-Property Animation