`
hanllove001
  • 浏览: 47999 次
  • 性别: Icon_minigender_1
  • 来自: 绵阳
社区版块
存档分类
最新评论

android之animation(一)

阅读更多

animations:动画。

新知识点介绍:animations是一系列的动画效果,这些效果可以运用在绝大数控件上面。

animations总的说来可以分为两类:

1、Tweened Animations:包括旋转、移动、伸展、淡入淡出等效果。

2、Frame-by-Frame Animations:这个可以创建一个Drawable序列,可以一个一个的显示。


这次介绍第一类动画效果:

这些动画有一些公共的函数如下:

setDuration(float time)动画执行时间;

setFillAfter(boolean b)是否保持动画结束时状态;

setFillBefore(boolean b)是否返回动画开始状态,当动画结束后;

setStartOffset(long time)经过多少时间动画开始执行;

setRepeatCount(int i)动画重复次数(默认为0)。


设置动画有两种方法,直接在代码中设置;或者在xml中设置。第一种方法比较容易理解,符合开发人员习惯;第二中方法比较容易进行二次开发,代码少。


一、代码中设置:

1、rotate:旋转。表示一个控件绕着一个点做旋转(平面旋转)。这个旋转是围绕一个点,而这个点是由百分比决定的,比如相对于自身时x为0.5,y为0.5,那么这个点就是该控件的中心;如果x为1,y为1,那么这个点就是控件的右下角;相对父控件时x为0.5,y为0.5,那么这个点就是该父控件的中心。

看代码:


                	/**
			 * 参数:1、开始角度,0是开始位置;2、最后终止位置与开始位置角度
			 * 3、旋转点x相对哪个控件,4、x所占该控件的比例;5、旋转点y相对哪个控件;6、y所占该控件的比例
			 */
			RotateAnimation rotateanimation = new RotateAnimation(
					//从现在状态绕着他本身的右下角旋转90度
					0, 90, Animation.RELATIVE_TO_SELF,1f, Animation.RELATIVE_TO_SELF,1f);
			//设置执行时间
			rotateanimation.setDuration(1000);
			//是否保持动画完时的状态
			rotateanimation.setFillAfter(true);
			//是否动画完了返回原状态
			rotateanimation.setFillBefore(false);
			//隔多长时间动画显示
			rotateanimation.setStartOffset(1000);
			//动画重复执行次数
			rotateanimation.setRepeatCount(1);
			//设置动画效果
			imageview.setAnimation(rotateanimation);

 

代码已经有了具体的注释,imageview为一张图片,上面是将图片绕着他自己的右下角旋转90度。

其中新建rotateanimation 时里面的第3和第5个参数也可以是Animation.RELATIVE_TO_PARENT,

相对父控件的x,y轴比例。


2、alpha:淡入淡出。

代码:


AlphaAnimation alphaanimation = new AlphaAnimation(1, 0);
			//设置动画时间
			alphaanimation.setDuration(1000);
imageview.setAnimation(alphaanimation);

 

构造函数的参数:第一个是动画前的透明度,1表示不透明,0表示完全透明;第二个是动画后的透明度。


3、translate:移动。移动就是由某一位置移动到另一位置,就是该控件相对自己或者父控件的一位置移动到另一个相对自己或者父控件的位置,那么他的构造函数就应该能猜到了吧,下面是代码:



                        /**
			 * 参数:1、移动前x相对的控件,2、x的比例,3、移动后x相对的控件,4、x的比例;
			 * 	     5、移动前y相对的控件 ,6、y的比例,7、移动后y相对的控件,8、y的比例
			 */
			TranslateAnimation translateanimation = new TranslateAnimation(
					Animation.RELATIVE_TO_SELF,0f,
					Animation.RELATIVE_TO_SELF,1f,
					Animation.RELATIVE_TO_SELF,0f,
					Animation.RELATIVE_TO_SELF,1f);
			translateanimation.setDuration(1000);
			imageview.setAnimation(translateanimation);

 

这个代码实现的是将该图片从相对自己的(0,0)坐标移动到相对自己的(x的长,y的长)坐标处。


4、scale:伸展。对控件进行放大或者缩小。



                         /**
			 * 参数:1、伸展前x的比例,2、伸展后x的比例,3、伸展前y的比例,4、伸展后y的比例
			 * 5、伸展x对应的控件,6、伸展y对应的控件
			 */
			ScaleAnimation scaleanimation  = new ScaleAnimation(
					1f, 0f, 1f, 0f, Animation.RELATIVE_TO_SELF, Animation.RELATIVE_TO_SELF);
			scaleanimation.setDuration(1000);
			imageview.setAnimation(scaleanimation);

 

     这个代码是将该图片缩小到0。参数都有详尽的解释。





**********************************************************************************



第二种方法:

在xml中设置:


1、首先在res下新建一个文件夹anim(animation的缩写)。


2、在该文件夹下新建所需要的动画的xml:


a、scale .xml:


 

<?xml version="1.0" encoding="utf-8"?>
<set  xmlns:android="http://schemas.android.com/apk/res/android"
	android:interpolator="@android:anim/accelerate_interpolator">
	<scale 
		android:fromXScale="1"
		android:toXScale="0"
		android:fromYScale="1"
		android:toYScale="0"
		android:duration="1000"
	/>
</set>

 

 

代码解释:scale ,伸展。参数依次是 x的原始百分比;伸展后x的百分比;y的原始百分比;伸展后y的百分比;

动画时间。


b、alpha,淡入淡出。


<?xml version="1.0" encoding="utf-8"?>

<set  xmlns:android="http://schemas.android.com/apk/res/android"
	android:interpolator="@android:anim/accelerate_interpolator">
	<alpha 
		android:fromAlpha="1"
		android:toAlpha="0"
		android:duration="1000"
	/>
</set>


代码解释:

控件开始状态透明度;控件最终透明度;动画时间。


c、rotate、旋转。


 

<?xml version="1.0" encoding="utf-8"?>
<set  xmlns:android="http://schemas.android.com/apk/res/android"
	android:interpolator="@android:anim/accelerate_interpolator">
	<rotate 
		android:fromDegrees="0"
		android:toDegrees="180"
		android:pivotX="100%"
		android:pivotY="100%"
		android:duration="1000"
	/>
</set>

 


代码解释:

开始角度;最终角度;旋转点x的百分比;旋转y的百分比;动画时间。

这里要说下,第三个和第四个参数配置有三中:

android:pivotX="50",这个是绝对位置,相对于整个屏幕的位置。

android:pivotX="50%",这个是相对自身的比例。

android:pivotX="50%p",这个是相对父控件的比例。


d、translate : 移动。


 

<?xml version="1.0" encoding="utf-8"?>
<set  xmlns:android="http://schemas.android.com/apk/res/android"
	android:interpolator="@android:anim/accelerate_interpolator">
	<translate 
		android:fromXDelta="50%"
		android:toXDelta="50%"
		android:fromYDelta="50%"
		android:toYDelta="50%"
		android:duration="1000"
	/>
</set>

 

 

代码解释:


移动前x的位置;移动后x的位置;移动前y的位置;移动后y的位置;时间

他的这个配置和上面的rotate一样,也有三种方法。不再赘述。


3、在代码中使用xml:

由于使用所有的xml都类似,我们只列举一种:


Animation translateanimation = AnimationUtils.loadAnimation(
					Animation1Activity.this, R.anim.translate);
			imageview.setAnimation(translateanimation);

 

代码解释:

首先新建一个Animation ,他是由AnimationUtils中的一个静态方法loadAnimation来实例化,可以通过他们的

名字就知道他们的意思。

这个loadAnimation需要两个参数,一个是context;一个是这个动画对应的xml的id。



今天就到这里了。

分享到:
评论
1 楼 zhouy478319399 2011-10-07  
很好 学习一下

相关推荐

Global site tag (gtag.js) - Google Analytics