Tween通过场景里的对象不断的进行图片的变换,比如平移、渐变、缩放、
旋转等来产生动画效果;
Frame动画叫做顺序播放实现做好的图像和电影类似。另外加上gif动画,
因为如果直接使用Bitmap或其他方法直接调用gif图片资源的话,显示的
是静态的,如果要做成动态的,就需要一些其他的方法来实现。
Tween动画分类:
Alpha:渐变透明度动画
Scale:渐变尺寸伸缩动画
Translate:画面转换位置移动动画
Rotate:画面转移旋转动画
有两种方式(java,xml):
java:
AlphaAnimation anim = new AlphaAnimation(0,1);
anim.setDuration(3000);
imageView.startAnimation(anim);
xml:
res/anim
Animation animation = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.alpha);
imageView.startAnimation(animation);
2)scale
ScaleAnimation(float fromX, float toX, float fromY,
float toY, int pivotXType, floatXValue,
int pivotYType, float pivotYValue)
功能:创建一个渐变尺寸伸缩动画
参数:fromX,toX分别是起始和结束时x坐标上的伸缩尺寸。
fromY,toY分别是起始和结束时ye坐标上的伸缩尺寸。
pivotXValue,pivotYValue分别为伸缩动画相对于x,y坐标开始的位置,
pivotXType,pivotYType分别为x,y的伸缩模式。
2.1)、直接在程序中实现的方式java代码:
Animation scale = new ScaleAnimation(0f, 1f, 0f, 1f, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);?
scale.setDuration(5000);?//设置动画持续时间? img.startAnimation(scale); //开始动画
ps:
相对于(0,0)位置
Animation anim = new ScaleAnimation(0, 1, 0, 1);
相对与自身中心位置
Animation anim = new ScaleAnimation(1.0f,0.0f,1.0f,0.0f,Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0.5f);
是否保持动画后的状态,true表示保持
anim.setFillAfter(true);
消失在(300,300)的位置
Animation anim = new ScaleAnimation(1.0f,0.0f,1.0f,0.0f,Animation.ABSOLUTE,300,Animation.ABSOLUTE,300);
*****重点理解
00……………………………………………………………………………………………………………………………..
2.2).xml
android:interpolator="@android:anim/accelerate_decelerate_interpolator"
3)translate
TranslateAnimation(float fromXDelta, float toXDelta, float YDelta, float toYDelta)
功能:创建一个移动画面位置的动画
参数:fromXDelta,fromYDelta分别是其实坐标;toXDelta,toYDelta分别是结束坐标
1、直接在程序中实现java代码:
Animation translate = new TranslateAnimation(10, 100, 10, 100);
translate.setDuration(3000);?//设置动画持续时间?img.startAnimation(translate); //开始动画?
java调用
Animation translate = AnimationUtils.loadAnimation(TweenActivity.this, R.anim.translate_anim);?
img.startAnimation(translate);//开始动画
4)rotate
Rotate(float fromDegrees, float toDegrees, int pivotXType, float pivotXValue, int pivotYType,float pivotYValue)
功能:创建一个旋转画面的动画
参数:fromDegrees为开始的角度;toDegrees为结束的角度。pivotXValue、pivotYType分别为x,y的伸缩模式。pivotXValue,pivotYValue分别为伸缩动画相对于x,y的坐标开始位置
1、直接在程序中创建动画java代码:
Animation rotate = new RotateAnimation(0f,+360f,?
Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF, 0.5f);?
rotate.setDuration(3000);
img.startAnimation(rotate);
5)AnimationSet
是一个动画集合
java:
AnimationSet as = new AnimationSet(true);
as.setDuration(2000);//给每一个Animation指定持续时间as.setInterpolator(new LinearInterpolator());//指定AnimationSet中所有的Animation都是匀速Animation rotateAnim = new RotateAnimation(0, 360, Animation.RELATIVE_TO_SELF, 0.5f,Animation.RELATIVE_TO_SELF,0.5f);
//rotateAnim.setDuration(2000);rotateAnim.setStartOffset(1000);//在下边startAnimation之后,过多长时间开始执行动画AlphaAnimation alphaAnim = new AlphaAnimation(0, 1);
//alphaAnim.setDuration(2000);as.addAnimation(rotateAnim);
as.addAnimation(alphaAnim);
imageView.startAnimation(as);
xml:
Animation anim = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.set);
imageView.startAnimation(anim);
ps:1.监听Animation状态的事件AnimationListener
anim.setAnimationListener(new AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
}
@Override
public void onAnimationRepeat(Animation animation) {
}
@Override
public void onAnimationEnd(Animation animation) {
}
});
ps.2.启动Animation两种方式
方式一:
private int[] images = {R.drawable.pic1,
R.drawable.pic2,R.drawable.pic3,
R.drawable.pic4};
final AnimationDrawable animDrawable = new AnimationDrawable();
for(int i=0;i<4;i++){
animDrawable.addFrame(getResources().getDrawable(images[i]),80);
}
image.setBackgroundDrawable(animDrawable);
animDrawable.setOneShot(false);
btn1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
animDrawable.start();
// animDrawable.stop(); }
});
方式二:
要求是文件命名要遵循一定规律,方便递归查找。
for(int i=0;i<4;i++){
//参数1,文件名
//参数2,资源类型
//参数3,是那个package的。
int resId = getResources().getIdentifier("pic"+(i+1), "drawable", "com.anjoyo.animation2");
animDrawable.addFrame(getResources().getDrawable(resId), 500);
}
image.setBackgroundDrawable(animDrawable);
animDrawable.start();
2.2xml的实现:
定义:
使用1:
AnimationDrawable d = (AnimationDrawable) getResources().getDrawable(R.anim.frame);
image.setBackgroundDrawable(d);
d.start();
使用2,在xml中使用:
AnimationDrawable d = (AnimationDrawable) image.getBackground();
d.start();