关闭

Animation的使用

标签: Animation动画
1709人阅读 评论(0) 收藏 举报

Animation(动画)有两种分类:补间动画(Tween)和帧动画(Frame)


补间动画主要有以下几种:

旋转(RotateAnimation)

平移(TranslateAnimation)

拉伸(ScaleAnimation)

透明度(AlphaAnimation)


实现的方式:

1.实例相应的动画对象

2.加载资源中的动画文件


动画的属性

duration:动画持续的时间

filiAfter:为true保持结束时的状态,为false变回最初的状态

repeatCount:重复的次数(不包括第一次)

startOffset:距离动画开始的时间

repeatMode:1表示重新开始,2表示从最后一个状态往回逆序播放


帧动画:

实现方法

1.实例AnimationDrawable

2.在drawable新建类型为animation-list的xml文件,然后加载该文件


代码如下

package com.example.animaction;

import android.os.Bundle;
import android.view.animation.AlphaAnimation;
import android.view.animation.Animation;
import android.view.animation.AnimationSet;
import android.view.animation.AnimationUtils;
import android.view.animation.CycleInterpolator;
import android.view.animation.RotateAnimation;
import android.view.animation.ScaleAnimation;
import android.view.animation.TranslateAnimation;
import android.widget.TextView;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.graphics.drawable.AnimationDrawable;
import android.graphics.drawable.Drawable;
@SuppressLint("NewApi")
public class MainActivity extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		TextView tv = (TextView) findViewById(R.id.tv);
		/**
		 * 透明度动画
		 */
		// 方法一:
		// 参数1为起始透明度,参数2为结束透明度
		// AlphaAnimation alphaAnimation = new AlphaAnimation(1,
		// 0.5f);//1能自动转换为float,0.5默认为double值
		AlphaAnimation alphaAnimation = new AlphaAnimation(1, 0);
		// 设置执行时间,默认为0
		alphaAnimation.setDuration(3000);
		// 重复次数
		alphaAnimation.setRepeatCount(3);
		// 重复模式,Animation.RESTART:从头开始,Animation.REVERSE:逆序
		alphaAnimation.setRepeatMode(Animation.REVERSE);
		// 设置结束时状态,为true保持结束时状态,false变回原先的状态
		alphaAnimation.setFillAfter(true);

		// 方法二:
		// 加载资源中的动画文件
		Animation alphaAnimation1 = AnimationUtils.loadAnimation(this,
				R.anim.alpha_anim);
		tv.startAnimation(alphaAnimation1);

		/**
		 * 平移动画
		 */
		/*
		 * @parm
		 * fromXType-->起始x坐标的类型,三种类型:Animation.ABSOLUTE,RELATIVE_TO_PARENT,
		 * RELATIVE_TO_SELF
		 * 
		 * @parm fromXValue-->如果类型为ABSOLUTE,值就为绝对值,单位px
		 * RELATIVE_TO_PARENT,相对于父控件的位置,值为float(-1~1) RELATIVE_TO_SELF:相对自身控件的位置
		 * 
		 * @parm toXType -->结束时x坐标的位置
		 * 
		 * @parm toXValue -->结束时x坐标的值 其他四个参数与上面一样
		 * 
		 * 另一个构造方法默认使用ABSOLUTE类型
		 */
		// 表示从相对自身控件0.5的位置水平平移到父控件0.5的位置
		TranslateAnimation translateAnimation = new TranslateAnimation(
				Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_PARENT,
				0.5f, 0, 0, 0, 0);
		translateAnimation.setDuration(3000);
		tv.startAnimation(translateAnimation);

		/**
		 * 缩放动画
		 */
		/*
		 * x方向:fromX ,toX-->缩放的比例从0.5(会直接变成原来的一半,没有动画效果)变成1.5 y方向:fromY ,toY
		 * 后面四个参数确定缩放的中心点。 4个参数类型为相对自身控件 6个参数类型为绝对的
		 */
		// 如果类型是相对父控件,就相当于把控件拉大到父控件中心的位置
		ScaleAnimation scaleAnimation = new ScaleAnimation(0, 1.0f, 0, 1.0f,
				Animation.RELATIVE_TO_PARENT, 0.5f,
				Animation.RELATIVE_TO_PARENT, 0.5f);
		scaleAnimation.setDuration(3000);
		tv.startAnimation(scaleAnimation);

		/**
		 * 旋转动画
		 */
		/*
		 * fromDegrees-->起始角度,toDegrees-->结束角度 后面四个参数为确定旋转的中心点
		 */
		RotateAnimation rotateAnimation = new RotateAnimation(0, 180,
				Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF,
				0.5f);
		rotateAnimation.setDuration(5000);
		// 循环播放,参数循环的次数,会在setDuration的时间中循环完,循环为0~180,0~-180算一次
		CycleInterpolator cycleInterpolator = new CycleInterpolator(20);
		rotateAnimation.setInterpolator(cycleInterpolator);
		tv.startAnimation(rotateAnimation);

		/**
		 * 动画集合
		 */
		// 方法一:
		Animation set = AnimationUtils.loadAnimation(this, R.anim.set);
		// start马上执行,set可能不会马上执行
		tv.startAnimation(set);

		// 如果参数为true,所以动画都执行同一个变速器即set设置的变速器,false执行各自的变速器
		AnimationSet set2 = new AnimationSet(false);
		set2.addAnimation(rotateAnimation);
		scaleAnimation.setStartOffset(10000);
		set2.addAnimation(scaleAnimation);
		
		
		/**
		 * 帧动画
		 */
		//第一种
		//AnimationDrawable间接继承Drawable
		AnimationDrawable ad = new AnimationDrawable();
		Drawable frame1 = getResources().getDrawable(R.drawable.ic_launcher);
		ad.addFrame(frame1, 1000/*显示的时间*/);
		//动画只执行一次
		ad.setOneShot(true);
		tv.setBackground(ad);
		ad.start();//开始动画
		ad.stop();//结束之后再开始从头开始播放
		
		//第二种
		tv.setBackgroundResource(R.drawable.list);
		AnimationDrawable ad1 = (AnimationDrawable) tv.getBackground();
		ad1.start();
	}

	@Override
	public void finish() {
		super.finish();
		// 当startActivity或者finish之后,设置页面切换的动作效果
		overridePendingTransition(/* 进入的页面的动画 */R.anim.alpha_anim, /* 离开的页面的动画 */
				R.anim.set);
	}

}


XMLz
<?xml version="1.0" encoding="utf-8"?>
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
    android:fromAlpha="1"
    android:toAlpha="0.5"
    android:duration="3000"
    android:repeatMode="restart"
    android:repeatCount="3">
    

</alpha>

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

    <alpha
        android:duration="3000"
        android:fromAlpha="0"
        android:toAlpha="1" />

    <!-- 只能设置相对自身的缩放 -->
    <scale
        android:duration="3000"
        android:fromXScale="0"
        android:fromYScale="0"
        android:pivotX="50%"
        android:pivotY="50%"
        android:toXScale="1"
        android:toYScale="1" />
    
    <rotate 
        android:duration="3000"
        android:pivotX="50%"
        android:pivotY="50%"
        android:fromDegrees="0"
        android:toDegrees="360"/>
    
    <translate 
        android:duration="3000"
        android:fromXDelta="0"
        android:toXDelta="100%"/>

    <!-- android:startOffset="3000":三秒之后才会执行 -->
    <alpha
        android:duration="3000"
        android:fromAlpha="1"
        android:startOffset="3000"
        android:toAlpha="0" />

</set>


2
0
查看评论

动画(Animation) 之 (闪烁、左右摇摆、上下晃动等效果)

左右晃动的效果: (这边显示没那么流畅)一、续播  (不知道取什么名字好,就是先播放动画A, 接着播放动画B) 有两种方式。 第一种,分别动画两个动画,A和B, 然后先播放动画A,设置A 的 AnimationListener。当onAnimationEnd触发(即A播...
  • feng88724
  • feng88724
  • 2011-11-22 15:49
  • 36138

Animation 动画介绍和实现

Android 平台提供了两类动画。 第一类就是 Frame动画(AnimationDrawable),帧动画。 由一张张的图片连续显示呈现出来的动画。 在drawable目录下创建一个配置文件。标签是animation-list。 oneshot属性,如果为true,一发。 false,停不下来。...
  • ideal_Utopia
  • ideal_Utopia
  • 2016-07-09 00:40
  • 869

APIDemo学习笔记——Android上几种简单的Animation使用方法(一)

<br />(啊,一不小心把这篇文章删了,没有备份,只能重来了。)<br />在API Demo的View->Animation下可以找到四个Animation的Demo,第一个3D Translate比较复杂,最后再讲,先讲第2个Interpolator。该Activ...
  • lxw1980
  • lxw1980
  • 2011-01-25 14:24
  • 14402

Core Animation笔记,基本的使用方法

基本动画 使用 CABasicAnimation,实现一个动画 CABasicAnimation *animation = [CABasicAnimation animation]; animation.keyPath = @"position.x"; animati...
  • Leemin_ios
  • Leemin_ios
  • 2016-08-02 16:06
  • 629

animation基本用法(css方式和原始js方式)

浏览器支持: Internet Explorer 10、Firefox 以及 Opera 支持 animation 属性。 Safari 和 Chrome 支持替代的 -webkit-animation 属性。(仅支持现代浏览器) 定义: animation 属性是一个简写属...
  • weixin_36483160
  • weixin_36483160
  • 2017-01-11 16:04
  • 1267

Android的Animation之LayoutAnimation使用方法

LayoutAnimationController用于为一个layout里面的控件,或者是一个ViewGroup里面的控件设置动画效果,可以在XML文件中设置,亦可以在Java代码中设置。 一种直接在XML文件中设置 1.  在res/anim文件夹下新建一个XML文件,名为...
  • imdxt1986
  • imdxt1986
  • 2011-11-09 16:37
  • 45326

Animation & Property Animation 使用

Android中开发动效有两套框架可以使用,分别为 Animation 和 Property Animation; 相对来说,Animator比Animation要强大太多,两者之间的主要区别在于: 区别一:需要的Anroid API level不一样 Property Animati...
  • tianjian4592
  • tianjian4592
  • 2015-03-11 16:39
  • 6841

Android 属性动画(Property Animation) 完全解析 (上)

转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/380674751、概述Android提供了几种动画类型:View Animation 、Drawable Animation 、Property Animation 。View An...
  • lmj623565791
  • lmj623565791
  • 2014-07-25 09:34
  • 325395

Animation基本的几种使用方法

定义一个布局文件 xml version="1.0" encoding="utf-8"?> RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android&q...
  • i_need_try
  • i_need_try
  • 2016-04-15 17:22
  • 249

android 基础 res文件 动画anim

http://www.cnblogs.com/yc-755909659/p/4290114.html 1.Animation 动画类型 Android的animation由四种类型组成: XML中 alph 渐变透明度动画效果 scale 渐变尺寸伸缩动画效果 translate 画面转换位置移动...
  • l331258747
  • l331258747
  • 2016-10-18 15:43
  • 2484
    个人资料
    • 访问:20907次
    • 积分:455
    • 等级:
    • 排名:千里之外
    • 原创:26篇
    • 转载:5篇
    • 译文:0篇
    • 评论:0条