Android Tween动画

闲来无事,说说动画吧,之前也用过简单的动画,但每次都是上网查,不是很方便,想想还是写写吧。

说到Android 动画,能想到的就是Animations,它提供了一系列动画效果,旋转,平移,渐变等等。Animations大概可以分为两类:

一是Tween动画 即TweenedAnimations它提供了动画的 1、旋转RotateAnimation,2、平移TranslateAnimation,3、渐变AlphaAnimation ,4、缩放ScaleAnimation动画。

二是Frame动画即Frame-by-FrameAnimations 它可以顺序播放事先做好的图像,如一个drawable序列 与gif原理类似。

下面就分别介绍下几个动画吧,我写的是一个按钮的动画效果。

AlphaAnimations :渐变

1.代码实现

	//AlphaAnimation类的第一个参数fromAlpha表示动画起始时的透明度,第二个参数toAlpha表示动画结束时的透明度
	//setDuration设置动画时间,适用于这几类动画。
	Animation alphaAnimation = new AlphaAnimation(0f, 1.0f);  
	alphaAnimation.setDuration(3000);  
	btnanimation.startAnimation(alphaAnimation); 
其中0表示完全透明,1.0表示完全不透明。

2.xml实现

<?xml version="1.0" encoding="utf-8"?>  
<set xmlns:android="http://schemas.android.com/apk/res/android">  
    <alpha  
        android:fromAlpha="0.1"  
        android:toAlpha="1.0"  
        android:duration="2000"  
    />  
</set>
在activity中引用

<span style="white-space:pre">	</span>Animation alphaAnimation =  AnimationUtils.loadAnimation(ScaleAnimationActivity.this, R.anim.alpha_animation);  
	alphaAnimation.setDuration(3000);  
	btnalpha.startAnimation(alphaAnimation);

RotateAnimation:旋转

1.代码实现

<span style="white-space:pre">	</span>//Animation rotateAnimation=new RotateAnimation(0f, 360f);
	//Animation rotateAnimation=new RotateAnimation(0f, 360f,0.5f,0.5f);
	Animation rotateAnimation=new RotateAnimation(0f, 360f,Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0.5f);
	rotateAnimation.setDuration(500);  
	btnrotate.startAnimation(rotateAnimation);

第一种两个参数:第一个参数为旋转动画的开始角度,第二个为旋转动画的结束角度。

第二种四个参数:第一个动画的开始角度,第二个动画的结束角度,第三第四应该是动画相对于物件的X、Y坐标的开始位(测试没有发现效果,有知道的同学可以告知下)

第三种六个参数:1、动画的开始角度。2、动画的结束角度。3、旋转x轴坐标的类型,有absolute绝对坐标,relative_to_self 相对于自身坐标,relative_to_parent相对于父控件坐标。4、x轴的值。5、旋转Y轴坐标的类型,同X轴。6、Y轴的值。后四个参数用于确定围绕旋转的圆的圆心位置。


2.在xml中使用。

<?xml version="1.0" encoding="utf-8"?>  
<set xmlns:android="http://schemas.android.com/apk/res/android">  
    <rotate  
        android:interpolator="@android:anim/accelerate_decelerate_interpolator"  
        android:fromDegrees="0"  
        android:toDegrees="360"  
        android:pivotX="50%"  
        android:pivotY="50%"  
        android:duration="500"  
    />  
</set>
在activity中引用

<span style="white-space:pre">	</span>Animation rotateAnimation= AnimationUtils.loadAnimation(ScaleAnimationActivity.this, R.anim.rotate_animation);  
	rotateAnimation.setDuration(500);  
	btnrotate.startAnimation(rotateAnimation);
fromDegrees 开始角度,toDegrees结束角度,正数为顺时针,负数为逆时针。privotX和pivotY为动画相对于物件的X、Y坐标的开始位。duration为持续时间。


ScaleAnimation:缩放

1.代码实现

<span style="white-space:pre">	</span>//Animation scaleAnimation = new ScaleAnimation(0f, 1.0f,0f,1.0f); 
	//Animation scaleAnimation = new ScaleAnimation(0f, 1.0f,0f,1.0f,1.0f,1.0f); 
	Animation scaleAnimation = new ScaleAnimation(0f, 1.0f,0f,1.0f,Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0.5f); 
	scaleAnimation.setDuration(500);  
	btnscale.startAnimation(scaleAnimation); 

第一种四个参数 :第一和第二动画起始、结束时X坐标上的伸缩尺寸,第三和第四动画起始、结束时Y坐标上的伸缩尺寸.

第二种六个参数:和第一种的前四个相同,后面两个同样没测试出效果(知道的同学可以告知下)。

第三种八个参数:前四个参数和第一中相同,第五个为X轴坐标的类型,第六个X轴的值,第七个为Y轴坐标的类型,第八个为Y轴的值。

2.在xml中使用

<?xml version="1.0" encoding="utf-8"?>  
<set xmlns:android="http://schemas.android.com/apk/res/android">  
    <scale  
        android:interpolator="@android:anim/accelerate_decelerate_interpolator"  
        android:fromXScale="0.0"  
        android:toXScale="1.0"  
        android:fromYScale="0.0"  
        android:toYScale="1.0"  
        android:pivotX="50%"  
        android:pivotY="50%"  
        android:fillAfter="false"  
        android:duration="500"  
    />     
</set>  
在activity中引用
<span style="white-space:pre">	</span>Animation scaleAnimation =  AnimationUtils.loadAnimation(ScaleAnimationActivity.this, R.anim.scale_animation);<pre name="code" class="java"><span style="white-space:pre">	</span>scaleAnimation.setDuration(500);  
<span style="white-space:pre">	</span>btnscale.startAnimation(scaleAnimation); 

 fromXScale,fromYScale动画起始时X,Y坐标上的伸缩尺寸。 

toXScale,toYScale 动画结束时X,Y坐标上的伸缩尺寸。

pivotX,pivotY动画相对于物件X,Y坐标上的起始位置。fillAfter是否停留在执行完后的状态

TranslateAnimation :平移

1.代码实现

<span style="white-space:pre">	</span>//Animation translateAnimation = new TranslateAnimation(0f, 100.0f,0f,100.0f); 
	Animation translateAnimation = new TranslateAnimation(Animation.RELATIVE_TO_SELF,0f,Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0f,Animation.RELATIVE_TO_SELF,0.5f); 
	translateAnimation.setDuration(1000);  
	btntranslate.startAnimation(translateAnimation);

第一种:第一个参数fromXDelta ,第二个参数toXDelta:分别是动画起始、结束时X坐标。

第三个参数fromYDelta ,第四个参数toYDelta:分别是动画起始、结束时Y坐标。

第二种:比第一种加了个类型,相对于谁来说。有absolute绝对坐标,relative_to_self 相对于自身坐标,relative_to_parent相对于父控件坐标

2.在xml中使用

<?xml version="1.0" encoding="utf-8"?>  
<set xmlns:android="http://schemas.android.com/apk/res/android">  
    <translate  
        android:fromXDelta="10"  
        android:toXDelta="100"  
        android:fromYDelta="10"  
        android:toYDelta="100"  
    />  
</set> 
在activi中引用

Animation translateAnimation = AnimationUtils.loadAnimation(ScaleAnimationActivity.this, R.anim.translate_animation);
fromXDelta ,fromYDelta 动画起始时X,Y坐标的位置。 toXDelta,toYDelta动画结束时X,Y坐标的位置。

还有一些通用的方法,这里也列举下:

setDuration(long durationmills)设置动画持续时间,单位毫秒

setFillAfter (boolean fillafter) 是否保留在动画执行完成的状态 true停留在执行的状态,false不停留。

setFillBefore (boolean fillBefore) 是否停留在动画执行之前的状态 true停留在执行之前的装填,false不停留。

setStartOffSet (long startOffSet) 动画执行之前的等待时间。

setRepeatCount (int repeatCount) 动画重复执行的次数。

上面都是单个动画执行,下面介绍下多个动画同时执行。

AnimationSet:动画集

Animation scaleAnimation = new ScaleAnimation(0f, 1.0f,0f,1.0f,Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0.5f); 
				Animation alphaAnimation =  AnimationUtils.loadAnimation(ScaleAnimationActivity.this, R.anim.alpha_animation);  
				Animation rotateAnimation= AnimationUtils.loadAnimation(ScaleAnimationActivity.this, R.anim.rotate_animation);  
				Animation translateAnimation = AnimationUtils.loadAnimation(ScaleAnimationActivity.this, R.anim.translate_animation); 
				AnimationSet set = new AnimationSet(true);  
				set.addAnimation(scaleAnimation);
				set.addAnimation(alphaAnimation);
				set.addAnimation(rotateAnimation);
				set.addAnimation(translateAnimation);
				btnanimationset.startAnimation(set);
将上面的例子集合下,满足多个动画效果。

Interpolator :

定义了动画变化的速率,定义了一下几种:

AccelerateDecelerateInterpolator 在动画开始与介绍的地方速率改变比较慢,在中间的时候加速
AccelerateInterpolator 在动画开始的地方速率改变比较慢,然后开始加速
CycleInterpolator 动画循环播放特定的次数,速率改变沿着正弦曲线
DecelerateInterpolator 在动画开始的地方速率改变比较慢,然后开始减速
LinearInterpolator 在动画的以均匀的速率改变

在xml中的使用Android:interpolator="@android:anim/decelerate_interpolator"
在代码中的使用alphaAnimation.setInterpolator(new Accelerateinterpolator());

好了Tween就介绍到这里。下一篇讲Frame动画。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值