Android开发_Animation简单介绍

Android的2种Animation模式:

1. Tween Animation:通过对场景里的对象不断做图像变换(平移、缩放、旋转)产生动画效果,即是一种渐变动画;

2. Frame Animation:顺序播放事先做好的图像,是一种画面转换动画。


四种基本动画类型
在JAVA类中:
  1、AlphaAnimation(渐变动画)
2、ScaleAnimation(伸缩动画)
3、TranslateAnimation(位置动画)
4、RotateAnimation(旋转动画)

在XML文件中:

  1、alpha(渐变动画)
2、scale(伸缩动画)
3、translate(位置动画)
4、rotate(旋转动画)

动画可以通过new动画类的方式来创建,也可以通过AnimationUtils工具类的loadAnimation方法来加载xml文件实现
public class MainActivity extends Activity {
	private Button btn;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		AlphaAnimation aa = new AlphaAnimation(0, 1);
		aa = (AlphaAnimation) AnimationUtils.loadAnimation(MainActivity.this,
				R.anim.aa);

		RotateAnimation ra = new RotateAnimation(0, 360);
		ra = (RotateAnimation) AnimationUtils.loadAnimation(MainActivity.this,
				R.anim.ra);

		TranslateAnimation ta = new TranslateAnimation(0, 100, 0, 100);
		ta = (TranslateAnimation) AnimationUtils.loadAnimation(
				MainActivity.this, R.anim.ta);

		ScaleAnimation sa = new ScaleAnimation(0, 1, 0, 1);
		sa = (ScaleAnimation) AnimationUtils.loadAnimation(MainActivity.this,
				R.anim.sa);
	}
}
对应动画的xml文件
<?xml version="1.0" encoding="utf-8"?>
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
    android:fromAlpha="0" 
    android:toAlpha="1"
    android:duration="1000">
</alpha>
<?xml version="1.0" encoding="utf-8"?>
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
    android:fromAlpha="0" 
    android:toAlpha="1"
    android:duration="1000">
</alpha>
<scale xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="1000"
    android:fromXScale="0"
    android:toXScale="1"
    android:fromYScale="0"
    android:toYScale="1" >
</scale>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="1000"
    android:fromXDelta="0"
    android:fromYDelta="0"
    android:toXDelta="100"
    android:toYDelta="100" >
</translate>

通过view.startAnimation()方法来启动动画


动画集合AnimationSet

可以将多个动画放到一个动画集合中进行播放

public class MainActivity extends Activity {
	private Button btn;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		AlphaAnimation aa = new AlphaAnimation(0, 1);
		RotateAnimation ra = new RotateAnimation(0, 360);
		TranslateAnimation ta = new TranslateAnimation(0, 100, 0, 100);
		ScaleAnimation sa = new ScaleAnimation(0, 1, 0, 1);

		AnimationSet as = new AnimationSet(true);
		as.addAnimation(aa);
		as.addAnimation(ra);
		as.addAnimation(ta);
		as.addAnimation(sa);
		btn.startAnimation(as);
	}
}
通过xml文件的实现
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="1000"
    android:shareInterpolator="true" >

    <alpha
        android:fromAlpha="0"
        android:toAlpha="1" />

    <rotate
        android:fromDegrees="0"
        android:toDegrees="360" />

    <scale
        android:fromXScale="0"
        android:fromYScale="0"
        android:toXScale="1"
        android:toYScale="1" />

    <translate
        android:fromXDelta="0"
        android:fromYDelta="0"
        android:toXDelta="100"
        android:toYDelta="100" />

</set>

动画的事件监听

通过setAnimationListener(listener)方法来实现动画的监听,其中的listener参数为Animation.AnimationListener接

口。实现该接口需要重写三个方法:

ScaleAnimation sa = new ScaleAnimation(0, 1, 0, 1);
sa.setAnimationListener(new Animation.AnimationListener() {
<span style="white-space:pre">	</span>// 动画开始前
	@Override
	public void onAnimationStart(Animation anim) {

	}
<span style="white-space:pre">	</span>// 动画重复时
	@Override
	public void onAnimationRepeat(Animation anim) {

	}
<span style="white-space:pre">	</span>动画结束后
	@Override
	public void onAnimationEnd(Animation anim) {

	}
});

自定义动画

自定义动画一般继承Animation类,并重新其中的initialize()及applyTransformation()方法;initialize()在动画初始化时调用,可以获取到相应组件的宽和高;applyTransformation()则是实现自定义动画的方法

public class MyAnimation extends Animation {
	@Override
	public void initialize(int width, int height, int parentWidth,
			int parentHeight) {
		super.initialize(width, height, parentWidth, parentHeight);
	}

	@Override
	protected void applyTransformation(float interpolatedTime, Transformation t) {
		t.setAlpha(interpolatedTime);// 实现透明动画
		// 实现位移动画
		t.getMatrix().setTranslate(interpolatedTime * 100,
				interpolatedTime * 100);
		// 实现左右来回平移
		t.getMatrix().setTranslate(
				(float) (Math.sin(interpolatedTime * 10) * 10), 0);
		super.applyTransformation(interpolatedTime, t);
	}
}

布局动画

布局显示动画

LayoutAnimationController lac = new LayoutAnimationController(animation, delay);
lac.setOrder(LayoutAnimationController.ORDER_REVERSE);
layout.setLayoutAnimation(lac);

布局内容改变动画

可以在布局文件中添加 android:animateLayoutChanges="true"属性;如果想要改变动画效果,则要在代码中使用setLayoutTransition(transition)方法

通过xml文件来配置

<?xml version="1.0" encoding="utf-8"?>
<layoutAnimation xmlns:android="http://schemas.android.com/apk/res/android"
    android:animation="@anim/aa"
    android:delay="0.5" >

</layoutAnimation>
// 在相应的布局中使用以下属性<pre name="code" class="java" style="font-size:14px;">android:layoutAnimation="@anim/la"


Android图片逐帧动画
通过代码实现
public class MainActivity extends Activity {
	private ImageView iv;
	private AnimationDrawable ad;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		iv = (ImageView) findViewById(R.id.iv);
		
		ad = new AnimationDrawable();
		ad.addFrame(getResources().getDrawable(R.id.image1), 100);
		ad.addFrame(getResources().getDrawable(R.id.image2), 100);
		ad.addFrame(getResources().getDrawable(R.id.image3), 100);
		ad.addFrame(getResources().getDrawable(R.id.image4), 100);
		ad.setOneShot(false);// 设置重复播放
		
		iv.setBackgroundDrawable(ad);
		
		ad.start();
		//ad.stop();
	}

}
通过xml文件配置实现
<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android" >

    <item
        android:drawable="@drawable/image1"
        android:duration="100"/>
    <item
        android:drawable="@drawable/image2"
        android:duration="100"/>
    <item
        android:drawable="@drawable/image3"
        android:duration="100"/>
    <item
        android:drawable="@drawable/image4"
        android:duration="100"/>

</animation-list>
iv.setBackgroundResource(R.drawable.al);
ad = iv.getBackground();

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值