Android提高(19)——浅谈Android动画

原文地址: 浅谈Android动画

原文地址:Animation Resources


基础知识介绍:












第一种:AlphaAnimation 透明度动画


动画设置res/alpha.xml:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >

    <alpha
        android:duration="1000"
        android:fromAlpha="0.1"
        android:toAlpha="1.0" >
    </alpha>

</set>
动画使用:

Animation loadAnimation;
loadAnimation = AnimationUtils.loadAnimation(this, R.anim.alpha);
image.startAnimation(loadAnimation);



第二种:ScaleAnimation缩放动画

动画设置res/scale.xml:注释其实是不让加的啦

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >


    <scale
        android:duration="2000" <span style="white-space:pre">	</span><!-- 2秒 -->
        android:fillAfter="false"<span style="white-space:pre">	</span><!-- 不会到原本的状态 -->
        android:fromXScale="0.0"<span style="white-space:pre">	</span><!-- 从0.0到1.0的过渡 -->
        android:fromYScale="0.0"<span style="white-space:pre">	</span>
        <!-- 加速度,先加速后减速 ,Android自带有很多的插入器-->
        android:interpolator="@android:anim/accelerate_decelerate_interpolator"
        android:pivotX="50%"<span style="white-space:pre">		</span><!-- 当前的ImageView的一个中心点 -->
        android:pivotY="50%"<span style="white-space:pre">		</span><!-- 就相当于一个缩放点 -->
        android:toXScale="1.0"<span style="white-space:pre">		</span><!--  -->
        android:toYScale="1.0" /><span style="white-space:pre">	</span><!--  -->


</set>

动画使用:

Animation loadAnimation;
loadAnimation = AnimationUtils.loadAnimation(this, R.anim.scale);
image.startAnimation(loadAnimation);


第三种:TranslateAnimation位移动画


动画设置res/translate.xml:但是效果图是向右后方移动的,也就是说,是直线过去的,xy平面图。

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >

    <translate
        android:duration="1000"
        android:fromXDelta="10"
        android:fromYDelta="10"
        android:toXDelta="100"
        android:toYDelta="100" />

</set>
动画使用:

Animation loadAnimation;
loadAnimation = AnimationUtils
	.loadAnimation(this, R.anim.translate);
image.startAnimation(loadAnimation);


第四种:RotateAnimation旋转动画

动画设置res/rotate.xml:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >

    <rotate
        android:duration="1000"
        android:fromDegrees="0"
        android:interpolator="@android:anim/accelerate_decelerate_interpolator"
        android:pivotX="50%"	<!-- 旋转点 -->
        android:pivotY="50%"
        android:toDegrees="+360" />

</set>
动画使用:

Animation loadAnimation;
loadAnimation = AnimationUtils.loadAnimation(this, R.anim.rotate);
image.startAnimation(loadAnimation);


组合动画案例:

案例一:


			// 先加载位移动画
			Animation loadAnimation;
			loadAnimation = AnimationUtils
					.loadAnimation(this, R.anim.translate);
			image.startAnimation(loadAnimation);
			
			// 旋转动画
			final Animation loadAnimation2 = AnimationUtils.loadAnimation(this,
					R.anim.rotate);
			
			// 在位移动画结束后开始执行旋转动画
			loadAnimation.setAnimationListener(new AnimationListener() {


				@Override
				public void onAnimationStart(Animation arg0) {
					// TODO Auto-generated method stub


				}


				@Override
				public void onAnimationRepeat(Animation arg0) {
					// TODO Auto-generated method stub


				}


				@Override
				public void onAnimationEnd(Animation arg0) {
					// TODO Auto-generated method stub
					image.startAnimation(loadAnimation2);
				}
			});

案例二:


动画集设置continue_anim.xml:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >

    <alpha
        android:duration="3000"
        android:fromAlpha="0.2"
        android:toAlpha="1.0" />
    <alpha
        android:duration="3000"
        android:fromAlpha="1.0"
        android:startOffset="3000"
        android:toAlpha="0.2" />

</set>
动画使用:

Animation loadAnimation;
loadAnimation = AnimationUtils.loadAnimation(this,
	R.anim.continue_anim);
image.startAnimation(loadAnimation);

案例三:


// 这次使用的是动态加在的Animation
			AlphaAnimation alphaAnimation = new AlphaAnimation(0.1f, 1.0f);
			alphaAnimation.setDuration(100);
			alphaAnimation.setRepeatCount(10);
			// 倒序播放或者正序播放,这里是倒序重复REVERSE。正序重复RESTART。
			alphaAnimation.setRepeatMode(Animation.REVERSE);
			image.startAnimation(alphaAnimation);

案例四:


动画设置zoom_in.xml:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:interpolator="@android:anim/decelerate_interpolator"
    android:zAdjustment="top" >

    <scale
        android:duration="@android:integer/config_mediumAnimTime"
        android:fromXScale="1.0"
        android:fromYScale="1.0"
        android:pivotX="50%p"
        android:pivotY="50%p"
        android:toXScale="0.1"
        android:toYScale="0.1" />

    <alpha
        android:duration="@android:integer/config_mediumAnimTime"
        android:fromAlpha="1.0"
        android:toAlpha="0" />

</set>
zoom_out.xml:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:interpolator="@android:anim/decelerate_interpolator"
    android:zAdjustment="top" >

    <scale
        android:duration="@android:integer/config_mediumAnimTime"
        android:fromXScale="1.0"
        android:fromYScale="1.0"
        android:pivotX="50%p"
        android:pivotY="50%p"
        android:toXScale="0.1"
        android:toYScale="0.1" />

    <alpha
        android:duration="@android:integer/config_mediumAnimTime"
        android:fromAlpha="1.0"
        android:toAlpha="0" />

</set>
动画使用:

Intent intent=new Intent(MainActivity.this,MainActivity2.class);
startActivity(intent);
// 第一个Activity缩小消失,第二个Activity放大出现
overridePendingTransition(R.anim.zoom_in,R.anim.zoom_out);




LayoutAnimation布局动画:


布局文件:list_layout.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <ListView
        android:id="@+id/listView"
        android:layout_width="match_parent"
        android:layout_height="match_parent" >
    </ListView>

</LinearLayout>
package com.imooc.android_animation;

import java.util.ArrayList;
import java.util.List;

import android.app.Activity;
import android.os.Bundle;
import android.view.animation.AnimationUtils;
import android.view.animation.LayoutAnimationController;
import android.widget.ArrayAdapter;
import android.widget.ListView;

public class ListActivity extends Activity{
	
	private ListView listView;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		setContentView(R.layout.list_layout);
		
		// 设置ListView
		listView=(ListView) findViewById(R.id.listView);
		List<String>list=new ArrayList<String>();
		for(int i=0;i<20;i++)
		{
			list.add("笑笑"+i);
		}
		ArrayAdapter<String> adapter=new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, list);
	    listView.setAdapter(adapter);
	    
	    // 加载动画
	    // 布局动画控制器LayoutAnimationController
	    LayoutAnimationController lac=new LayoutAnimationController(
	    		AnimationUtils.loadAnimation(this, R.anim.zoom_in));
	    // 正常顺序,就是ListView中的控件按照顺序播放动画
	    lac.setOrder(LayoutAnimationController.ORDER_NORMAL);
	    // 给ListView加载布局动画
	    listView.setLayoutAnimation(lac);
	    listView.startLayoutAnimation();
	}

}
Intent intent=new Intent(MainActivity.this,ListActivity.class);
			startActivity(intent);


FrameAnimation逐帧动画

动画设置:在drawable/anim_list.xml中:

<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android" >

    <item
        android:drawable="@drawable/one"
        android:duration="500"/>
    <item
        android:drawable="@drawable/two"
        android:duration="500"/>
    <item
        android:drawable="@drawable/three"
        android:duration="500"/>
    <item
        android:drawable="@drawable/four"
        android:duration="500"/>
    <item
        android:drawable="@drawable/five"
        android:duration="500"/>
    <item
        android:drawable="@drawable/six"
        android:duration="500"/>

</animation-list>
image.setImageResource(R.drawable.anim_list);




Animation有一个巨大的缺点:



在上面这个例子中,点击图片会弹出Toast,点击move会让图片右移。

我们在这个设置图片右移后不返回原来位置,

但是出现的问题是右移后点击图片并不会有Toast弹出,返回是点击原来空白的位子会出现Toast。

唉,所以我们要用Android属性动画。














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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值