原文地址: 浅谈Android动画
原文地址:Animation Resources
基础知识介绍:
第一种:AlphaAnimation 透明度动画
动画设置res/alpha.xml:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >
<alpha
android:duration="1000"
android:fromAlpha="0.1"
android:toAlpha="1.0" >
</alpha>
</set>
动画使用:
Animation loadAnimation;
loadAnimation = AnimationUtils.loadAnimation(this, R.anim.alpha);
image.startAnimation(loadAnimation);
动画设置res/scale.xml:注释其实是不让加的啦
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >
<scale
android:duration="2000" <span style="white-space:pre"> </span><!-- 2秒 -->
android:fillAfter="false"<span style="white-space:pre"> </span><!-- 不会到原本的状态 -->
android:fromXScale="0.0"<span style="white-space:pre"> </span><!-- 从0.0到1.0的过渡 -->
android:fromYScale="0.0"<span style="white-space:pre"> </span>
<!-- 加速度,先加速后减速 ,Android自带有很多的插入器-->
android:interpolator="@android:anim/accelerate_decelerate_interpolator"
android:pivotX="50%"<span style="white-space:pre"> </span><!-- 当前的ImageView的一个中心点 -->
android:pivotY="50%"<span style="white-space:pre"> </span><!-- 就相当于一个缩放点 -->
android:toXScale="1.0"<span style="white-space:pre"> </span><!-- -->
android:toYScale="1.0" /><span style="white-space:pre"> </span><!-- -->
</set>
动画使用:
Animation loadAnimation;
loadAnimation = AnimationUtils.loadAnimation(this, R.anim.scale);
image.startAnimation(loadAnimation);
第三种:TranslateAnimation位移动画
动画设置res/translate.xml:但是效果图是向右后方移动的,也就是说,是直线过去的,xy平面图。
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >
<translate
android:duration="1000"
android:fromXDelta="10"
android:fromYDelta="10"
android:toXDelta="100"
android:toYDelta="100" />
</set>
动画使用:
Animation loadAnimation;
loadAnimation = AnimationUtils
.loadAnimation(this, R.anim.translate);
image.startAnimation(loadAnimation);
第四种:RotateAnimation旋转动画
动画设置res/rotate.xml:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >
<rotate
android:duration="1000"
android:fromDegrees="0"
android:interpolator="@android:anim/accelerate_decelerate_interpolator"
android:pivotX="50%" <!-- 旋转点 -->
android:pivotY="50%"
android:toDegrees="+360" />
</set>
动画使用:
Animation loadAnimation;
loadAnimation = AnimationUtils.loadAnimation(this, R.anim.rotate);
image.startAnimation(loadAnimation);
组合动画案例:
案例一:
// 先加载位移动画
Animation loadAnimation;
loadAnimation = AnimationUtils
.loadAnimation(this, R.anim.translate);
image.startAnimation(loadAnimation);
// 旋转动画
final Animation loadAnimation2 = AnimationUtils.loadAnimation(this,
R.anim.rotate);
// 在位移动画结束后开始执行旋转动画
loadAnimation.setAnimationListener(new AnimationListener() {
@Override
public void onAnimationStart(Animation arg0) {
// TODO Auto-generated method stub
}
@Override
public void onAnimationRepeat(Animation arg0) {
// TODO Auto-generated method stub
}
@Override
public void onAnimationEnd(Animation arg0) {
// TODO Auto-generated method stub
image.startAnimation(loadAnimation2);
}
});
案例二:
动画集设置continue_anim.xml:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >
<alpha
android:duration="3000"
android:fromAlpha="0.2"
android:toAlpha="1.0" />
<alpha
android:duration="3000"
android:fromAlpha="1.0"
android:startOffset="3000"
android:toAlpha="0.2" />
</set>
动画使用:
Animation loadAnimation;
loadAnimation = AnimationUtils.loadAnimation(this,
R.anim.continue_anim);
image.startAnimation(loadAnimation);
案例三:
// 这次使用的是动态加在的Animation
AlphaAnimation alphaAnimation = new AlphaAnimation(0.1f, 1.0f);
alphaAnimation.setDuration(100);
alphaAnimation.setRepeatCount(10);
// 倒序播放或者正序播放,这里是倒序重复REVERSE。正序重复RESTART。
alphaAnimation.setRepeatMode(Animation.REVERSE);
image.startAnimation(alphaAnimation);
案例四:
动画设置zoom_in.xml:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/decelerate_interpolator"
android:zAdjustment="top" >
<scale
android:duration="@android:integer/config_mediumAnimTime"
android:fromXScale="1.0"
android:fromYScale="1.0"
android:pivotX="50%p"
android:pivotY="50%p"
android:toXScale="0.1"
android:toYScale="0.1" />
<alpha
android:duration="@android:integer/config_mediumAnimTime"
android:fromAlpha="1.0"
android:toAlpha="0" />
</set>
zoom_out.xml:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/decelerate_interpolator"
android:zAdjustment="top" >
<scale
android:duration="@android:integer/config_mediumAnimTime"
android:fromXScale="1.0"
android:fromYScale="1.0"
android:pivotX="50%p"
android:pivotY="50%p"
android:toXScale="0.1"
android:toYScale="0.1" />
<alpha
android:duration="@android:integer/config_mediumAnimTime"
android:fromAlpha="1.0"
android:toAlpha="0" />
</set>
动画使用:
Intent intent=new Intent(MainActivity.this,MainActivity2.class);
startActivity(intent);
// 第一个Activity缩小消失,第二个Activity放大出现
overridePendingTransition(R.anim.zoom_in,R.anim.zoom_out);
LayoutAnimation布局动画:
布局文件:list_layout.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<ListView
android:id="@+id/listView"
android:layout_width="match_parent"
android:layout_height="match_parent" >
</ListView>
</LinearLayout>
package com.imooc.android_animation;
import java.util.ArrayList;
import java.util.List;
import android.app.Activity;
import android.os.Bundle;
import android.view.animation.AnimationUtils;
import android.view.animation.LayoutAnimationController;
import android.widget.ArrayAdapter;
import android.widget.ListView;
public class ListActivity extends Activity{
private ListView listView;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.list_layout);
// 设置ListView
listView=(ListView) findViewById(R.id.listView);
List<String>list=new ArrayList<String>();
for(int i=0;i<20;i++)
{
list.add("笑笑"+i);
}
ArrayAdapter<String> adapter=new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, list);
listView.setAdapter(adapter);
// 加载动画
// 布局动画控制器LayoutAnimationController
LayoutAnimationController lac=new LayoutAnimationController(
AnimationUtils.loadAnimation(this, R.anim.zoom_in));
// 正常顺序,就是ListView中的控件按照顺序播放动画
lac.setOrder(LayoutAnimationController.ORDER_NORMAL);
// 给ListView加载布局动画
listView.setLayoutAnimation(lac);
listView.startLayoutAnimation();
}
}
Intent intent=new Intent(MainActivity.this,ListActivity.class);
startActivity(intent);
动画设置:在drawable/anim_list.xml中:
<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:drawable="@drawable/one"
android:duration="500"/>
<item
android:drawable="@drawable/two"
android:duration="500"/>
<item
android:drawable="@drawable/three"
android:duration="500"/>
<item
android:drawable="@drawable/four"
android:duration="500"/>
<item
android:drawable="@drawable/five"
android:duration="500"/>
<item
android:drawable="@drawable/six"
android:duration="500"/>
</animation-list>
image.setImageResource(R.drawable.anim_list);
Animation有一个巨大的缺点:
在上面这个例子中,点击图片会弹出Toast,点击move会让图片右移。
我们在这个设置图片右移后不返回原来位置,
但是出现的问题是右移后点击图片并不会有Toast弹出,返回是点击原来空白的位子会出现Toast。
唉,所以我们要用Android属性动画。