Android系统提供两种动画:一种是Tween,用来实现视图组件的移动、放大缩小、旋转及透明度变化;另一种是Frame动画,通过切换帧来实现,和电影类似。
Tween类在android.view.animation
包中,这个包包含了一些常用的动画类:
- Animation 动画抽象类,是个基类,其他几种类都继承该类。
- ScaleAnimation 用于放大、缩小的动画类
- AlphaAniamtion 用于控制透明度变化的动画类
- RotateAnimation 用于控制旋转变化的动画类
- TranslateAnimation 用于控制位置变化的动画类
- AnimationSet 定义动画合集的类,动画合成
- AnimationUtil 动画工具类
Tween可以配置在xml文件中,也可以直接硬编码到代码中(推荐配置到xml文件中)。
方法1: 硬编码到文件中
package com.yeetrack.android.animation;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.animation.AlphaAnimation;
import android.view.animation.Animation;
import android.view.animation.RotateAnimation;
import android.view.animation.ScaleAnimation;
import android.view.animation.TranslateAnimation;
import android.widget.Button;
import android.widget.ImageView;
public class MainActivity extends Activity {
private Button scaleButton;
private Button alphaButton;
private Button translateButton;
private Button rotateButton;
private ImageView imageView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
scaleButton = (Button)findViewById(R.id.testScaleId);
alphaButton = (Button)findViewById(R.id.testAlphaId);
translateButton = (Button)findViewById(R.id.testTranslateId);
rotateButton = (Button)findViewById(R.id.testRotateId);
imageView = (ImageView)findViewById(R.id.imageView);
imageView.setImageResource(R.drawable.annie);
OnClickListener onClickLinstener = new OnClickListener()
{
@Override
public void onClick(View v)
{
// TODO Auto-generated method stub
switch(v.getId())
{
case R.id.testScaleId:
//前四个参数,表示从无限小扩大到一倍大小;后面两个0.1f,控制着增长的点
Animation animation = new ScaleAnimation(0f, 1f, 0f, 1f, Animation.RELATIVE_TO_SELF, 0.1f, Animation.RELATIVE_TO_SELF, 0.1f);
animation.setDuration(3000);
imageView.startAnimation(animation);
break;
case R.id.testAlphaId:
Animation animation2 = new AlphaAnimation(0.1f, 1f);
animation2.setDuration(3000);
imageView.startAnimation(animation2);
break;
case R.id.testTranslateId:
Animation animation3 = new TranslateAnimation(10, 100, 10 ,100);
animation3.setDuration(3000);
imageView.startAnimation(animation3);
break;
case R.id.testRotateId:
//从0度选装180度,两个0.5f,表示围绕自身中点旋转,这两个点控制着旋转中心
Animation animation4 = new RotateAnimation(0f, 180f, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
animation4.setDuration(3000);
imageView.startAnimation(animation4);
break;
}
}
};
scaleButton.setOnClickListener(onClickLinstener);
alphaButton.setOnClickListener(onClickLinstener);
translateButton.setOnClickListener(onClickLinstener);
rotateButton.setOnClickListener(onClickLinstener);
}
}
配置到xml文件中
推荐的方法是配置到外部的xml文件中,这样和代码分离,方便以后配置。
在res目录下新建anim文件夹,新建一个translate.xml
文件,内容如下:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:fromXDelta="0"
android:toXDelta="100"
android:fromYDelta="0"
android:toYDelta="100"
android:duration="2000" />
</set>
这样就配置了平移的动画,使用动画的代码如下:
private Animation translateAnimation;
translateAnimation = AnimationUtils.loadAnimation(this, R.anim.translate);
imageView.startAnimation(translateAnimation);
ScaleAnimation
、AlphaAnimation
、RotateAnimation
也是一样的配置。
版权声明
本站文章、图片、视频等(除转载外),均采用知识共享署名 4.0 国际许可协议(CC BY-NC-SA 4.0),转载请注明出处、非商业性使用、并且以相同协议共享。
© 空空博客,本文链接:https://www.yeetrack.com/?p=612
近期评论