码迷,mamicode.com
首页 > 移动开发 > 详细

第二十六讲:Android之Animation

时间:2014-11-03 14:44:00      阅读:207      评论:0      收藏:0      [点我收藏+]

标签:android   style   blog   http   io   color   ar   使用   java   

懒惰象生锈一样,比操劳更能消耗身体;经常用的钥匙,总是亮闪闪的。 —— 富兰克林


本讲内容:Animation 动画

一、Android中动画的实现分两种方式,一种方式是补间动画 Tween Animation,就是说你定义一个开始和结束,中间的部分由程序运算得到。另一种叫逐帧动画 Frame Animation,就是说一帧一帧的连起来播放就变成了动画。和放电影的机制很相似,下面我们逐个学习。

下面引用官方文档

bubuko.com,布布扣

从图我们可以知道Animation的直接子类有AlphaAnimationAnimationSet、RotateAnimation、ScaleAnimation、TranslateAnimation。其中AnimationSet包含一系列的Animation。


二、Tween动画是操作某个控件让其展现出旋转()、渐变、移动、缩放的这么一种转换过程。我们可以以XML形式定义动画,也可以编码实现。


三、Tween Animation共同的节点属性


属性[类型]

功能  备注
Duration[long] 动画持续时间 毫秒为单位
fillAfter [boolean] 当设置为true 动画执行后,控件将停留在执行结束的状态
fillBefore[boolean] 当设置为true 动画执行后,控件将停留在执行之前的状态
repeatCount[int] 动画的重复次数  
RepeatMode[int] 定义重复的行为 1:重新开始  2:plays backward
startOffset[long] 动画执行之前的等待时间 毫秒为单位
     
     

四、alpha  渐变透明度动画效果(范围在0.0和1.0之间,分别代表透明和完全不透明

android:fromAlpha="1.0" 代表起始alpha值 浮点值,范围在0.0和1.0之间
android:toAlpha="0.0" 代表结尾alpha值 浮点值,范围也在0.0和1.0之间。
android:duration="500" 动画持续时间 毫秒为单位
     


五、scale 渐变尺寸伸缩动画效果(浮点值,比如1.0代表自身无变化,0.5代表起始时缩小一倍,2.0代表放大一倍

android:fromXScale 起始的X方向上相对自身的缩放比例 浮点值,范围在0.0和1.0之间
android:toXScale 结尾的X方向上相对自身的缩放比例  
android:fromYScale 起始的Y方向上相对自身的缩放比例  
android:toYScale 结尾的Y方向上相对自身的缩放比例  
android:pivotX 缩放的中轴点X坐标 如果想表示中轴点为图像的中心,
android:pivotY 缩放的中轴点Y坐标 可以把两个属性值定义成0.5或者50%。

android:pivotX属性代表旋转中心的X坐标值,android:pivotY属性代表旋转中心的Y坐标值,
这两个属性也有三种表示方式,
数字方式代表相对于自身左边缘的像素值,(绝对位置定位)Ainmation.ABSOLUTE
num%方式代表相对于自身左边缘或顶边缘的百分比,(相对于控件本身定位)Ainmation.RELATIVE_TO_SELF
num%p方式代表相对于父容器的左边缘或顶边缘的百分比。(相对于父控件) Ainmation.RELATIVE_TO_PARENF


六、translate  画面转换位置移动动画效果(代表一个水平、垂直的位移

android:fromXDelta 起始X方向的位置 浮点数、num%、num%p
android:toXDelta 结尾X方向上的位置  
android:fromYScale 起始Y方向上的位置  
android:toYDelta 结尾Y方向上的位置  
     

以上四个属性都支持三种表示方式:浮点数、num%、num%p

数字方式代表相对于自身左边缘的像素值,(绝对位置定位)
num%方式代表相对于自身左边缘或顶边缘的百分比,(相对于控件本身定位)100%表示移动自己的1倍距离
num%p方式代表相对于父容器的左边缘或顶边缘的百分比。(相对于父控件)


七、rotate  画面转移旋转动画效果

android:fromDegrees 代表起始角度 浮点值,单位:度
android:toDegrees 代表结尾角度 浮点值,单位:度
android:pivotX 旋转中心的X坐标  
android:pivotY 表旋转中心的Y坐标值  
     


我们通过一个例子感受一下,代码的讲解都写在注释里了

下面是res/layout/activity_main.xml 布局文件:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="com.example.text.MainActivity$PlaceholderFragment" >
 <ImageView 
        android:id="@+id/image"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/ic_launcher"
        android:layout_weight="1"/>
   <Button 
       android:id="@+id/translate" 
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:text="测试translate动画效果" />
   <Button 
       android:id="@+id/alpha" 
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:text="测试alpha动画效果" />
   <Button 
       android:id="@+id/rotate" 
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:text="测试rotate动画效果" />
   <Button 
       android:id="@+id/scale" 
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:text="测试scale动画效果" />
    
</LinearLayout>

下面是MainActivity.java主界面文件:

public class MainActivity extends Activity implements OnClickListener {
	private Button translate;
	private Button alpha;
	private Button rotate;
	private Button scale;
	private ImageView image;

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

		image = (ImageView) findViewById(R.id.image);
		translate = (Button) findViewById(R.id.translate);
		alpha = (Button) findViewById(R.id.alpha);
		rotate = (Button) findViewById(R.id.rotate);
		scale = (Button) findViewById(R.id.scale);
		translate.setOnClickListener(this);
		alpha.setOnClickListener(this);
		rotate.setOnClickListener(this);
		scale.setOnClickListener(this);
	}

	@Override
	public void onClick(View v) {
		// 创建一个AnimationSet对象
		AnimationSet animationSet = new AnimationSet(true);
		switch (v.getId()) {
		case R.id.alpha:
			// 创建一个AlphaAnimation对象
			AlphaAnimation alphaAnimation = new AlphaAnimation(1, 0);
			// 设置动画执行的时间(单位:毫秒)
			alphaAnimation.setDuration(1000);
			// 将AlphaAnimation对象添加到AnimationSet当中
			animationSet.addAnimation(alphaAnimation);
			// 使用ImageView的startAnimation方法开始执行动画
			image.startAnimation(animationSet);
			break;

		case R.id.translate:
			TranslateAnimation translateAnimation = new TranslateAnimation(
					Animation.RELATIVE_TO_SELF, 0f, Animation.RELATIVE_TO_SELF,
					0.5f, Animation.RELATIVE_TO_SELF, 0f,
					Animation.RELATIVE_TO_SELF, 1.0f);
			translateAnimation.setDuration(1000);
			animationSet.addAnimation(translateAnimation);
			image.startAnimation(animationSet);
			break;

		case R.id.rotate:
			RotateAnimation rotateAnimation = new RotateAnimation(0, 360,
					Animation.RELATIVE_TO_PARENT, 1f,
					Animation.RELATIVE_TO_PARENT, 0f);
			rotateAnimation.setDuration(5000);
			animationSet.addAnimation(rotateAnimation);
			image.startAnimation(animationSet);
			break;

		case R.id.scale:
			ScaleAnimation scaleAnimation = new ScaleAnimation(1, 0.1f, 1,
					0.1f, Animation.RELATIVE_TO_SELF, 0.5f,
					Animation.RELATIVE_TO_SELF, 0.5f);
			animationSet.addAnimation(scaleAnimation);
			animationSet.setStartOffset(1000);
			animationSet.setDuration(2000);
			image.startAnimation(animationSet);
			break;
		}
	}
}

下面是运行结果:

bubuko.com,布布扣


本讲到这里,谢谢大家!

第二十六讲:Android之Animation

标签:android   style   blog   http   io   color   ar   使用   java   

原文地址:http://blog.csdn.net/liguojin1230/article/details/40739171

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!