`

android动画效果

阅读更多
前几天弄alertdialog和popupwindow的时候,用到了android的动画效果,今天专门研究了一下关于android的动画效果,列出来,方便以后使用。

Android 平台提供了两类动画。 一类是Tween动画,就是对场景里的对象不断的进行图像变化来产生动画效果(旋转、平移、放缩和渐变)。
第二类就是 Frame动画,即顺序的播放事先做好的图像,与gif图片原理类似。

在附件里面我会把这两种效果的实例代码上传上来供大家下载,现在贴在方便使用的代码。

Tween动画
Alpha ---- 淡入淡出,Scale ---- 缩放效果,Translate ---- 移动效果,Rotate ---- 旋转

Frame动画
播放一组连续的图片


alpha_in.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.1"
        android:toAlpha="1.0" />

    <!--
  		   透明度控制动画效果 alpha
     	   浮点型值:
            fromAlpha 属性为动画起始时透明度
            toAlpha   属性为动画结束时透明度
            	说明: 
                0.0表示完全透明
                1.0表示完全不透明
         	   以上值取0.0-1.0之间的float数据类型的数字
        
     	   长整型值:
            duration  属性为动画持续时间
           		 说明:     
               	 时间以毫秒为单位

     -->

</set>


scale_in.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <scale
        android:duration="1500"
        android:fillAfter="false"
        android:fromXScale="0.5"
        android:fromYScale="0.5"
        android:interpolator="@android:anim/accelerate_decelerate_interpolator"
        android:pivotX="50%"
        android:pivotY="50%"
        android:toXScale="1.0"
        android:toYScale="1.0" />

</set>
<!-- 尺寸伸缩动画效果 scale
       属性:interpolator 指定一个动画的插入器
        在我试验过程中,使用android.res.anim中的资源时候发现
        有三种动画插入器:
            accelerate_decelerate_interpolator  加速-减速 动画插入器
            accelerate_interpolator        加速-动画插入器
            decelerate_interpolator        减速- 动画插入器
        其他的属于特定的动画效果
       浮点型值:
         
            fromXScale 属性为动画起始时 X坐标上的伸缩尺寸    
            toXScale   属性为动画结束时 X坐标上的伸缩尺寸     
        
            fromYScale 属性为动画起始时Y坐标上的伸缩尺寸    
            toYScale   属性为动画结束时Y坐标上的伸缩尺寸    
        
            说明:
                 以上四种属性值    
    
             0.0表示收缩到没有 
             1.0表示正常无伸缩     
                  	  值小于1.0表示收缩  
           			         值大于1.0表示放大
        
            pivotX     属性为动画相对于物件的X坐标的开始位置
            pivotY     属性为动画相对于物件的Y坐标的开始位置
        
            说明:
                    以上两个属性值 从0%-100%中取值
                    50%为物件的X或Y方向坐标上的中点位置
        
      	  长整型值:
            duration  属性为动画持续时间
     		       说明:   时间以毫秒为单位

        	布尔型值:
            fillAfter 属性 当设置为true ,该动画转化在动画结束后被应用
-->


translate_in.xml

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

    <!-- 定义从左向右进入的动画 -->
    <translate
        android:duration="1500"
        android:fromXDelta="-100%"
        android:toXDelta="0" />
    
<!-- <translate
    android:duration="2000"
    android:fromXDelta="30"
    android:fromYDelta="30"
    android:toXDelta="-80"
    android:toYDelta="300" /> -->

<!-- translate 位置转移动画效果
        整型值:
            fromXDelta 属性为动画起始时 X坐标上的位置    
            toXDelta   属性为动画结束时 X坐标上的位置
            fromYDelta 属性为动画起始时 Y坐标上的位置
            toYDelta   属性为动画结束时 Y坐标上的位置
            注意:
                     没有指定fromXType toXType fromYType toYType 时候,
                     默认是以自己为相对参照物             
        长整型值:
            duration  属性为动画持续时间
            说明:   时间以毫秒为单位
-->
</set>


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

<rotate
    android:duration="3000"
    android:fromDegrees="0"
    android:interpolator="@android:anim/decelerate_interpolator"
    android:pivotX="50%"
    android:pivotY="50%"
    android:toDegrees="+350" />
  
<!-- rotate 旋转动画效果
       属性:interpolator 指定一个动画的插入器
             在我试验过程中,使用android.res.anim中的资源时候发现
             有三种动画插入器:
                accelerate_decelerate_interpolator   加速-减速 动画插入器
                accelerate_interpolator               加速-动画插入器
                decelerate_interpolator               减速- 动画插入器
             其他的属于特定的动画效果
                           
     	  浮点数型值:
            fromDegrees 属性为动画起始时物件的角度    
            toDegrees   属性为动画结束时物件旋转的角度 可以大于360度   
        
         	   说明:
           	          当角度为负数——表示逆时针旋转
            	         当角度为正数——表示顺时针旋转              
                     (负数from——to正数:顺时针旋转)   
                     (负数from——to负数:逆时针旋转) 
                     (正数from——to正数:顺时针旋转) 
                     (正数from——to负数:逆时针旋转)       

          	  pivotX     属性为动画相对于物件的X坐标的开始位置
          	  pivotY     属性为动画相对于物件的Y坐标的开始位置
                
        		    说明:        以上两个属性值 从0%-100%中取值
             	            50%为物件的X或Y方向坐标上的中点位置

     	   长整型值:
   	         duration  属性为动画持续时间
        	    说明:       时间以毫秒为单位
-->
</set>


Frame动画
播放一组连续的图片
drawable --- drawable_anim.xml

<?xml version="1.0" encoding="utf-8"?> 
<animation-list xmlns:android="http://schemas.android.com/apk/res/android" 
                android:oneshot="true"> 
    <item android:drawable="@drawable/pq1" android:duration="50"/> 
    <item android:drawable="@drawable/pq2" android:duration="50"/> 
    <item android:drawable="@drawable/pq3" android:duration="50"/> 
    <item android:drawable="@drawable/pq4" android:duration="50"/> 
    <item android:drawable="@drawable/pq5" android:duration="50"/> 
    <item android:drawable="@drawable/pq6" android:duration="50"/> 
</animation-list> 


import android.app.Activity;
import android.graphics.drawable.AnimationDrawable;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.animation.AnimationUtils;
import android.widget.ImageView;

public class MainActivity extends Activity implements OnClickListener{

	private ImageView imageView,imageView2;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		imageView = (ImageView) findViewById(R.id.anim_img);
		imageView2 = (ImageView) findViewById(R.id.anim_draw_img);
		
		findViewById(R.id.anim_alpha).setOnClickListener(this);
		findViewById(R.id.anim_scale).setOnClickListener(this);
		findViewById(R.id.anim_translate).setOnClickListener(this);
		findViewById(R.id.anim_rotate).setOnClickListener(this);
		findViewById(R.id.anim_drawable).setOnClickListener(this);
	}

	@Override
	public void onClick(View arg0) {
		switch (arg0.getId()) {
		case R.id.anim_alpha:
			if(imageView.getVisibility()==View.INVISIBLE){
				imageView.setAnimation(AnimationUtils
						.loadAnimation(this, R.anim.alpha_in));
				imageView.setVisibility(View.VISIBLE);
			}else{
				imageView.setAnimation(AnimationUtils
						.loadAnimation(this, R.anim.alpha_out));
				imageView.setVisibility(View.INVISIBLE);
			}
			break;
		case R.id.anim_scale:
			if(imageView.getVisibility()==View.INVISIBLE){
				imageView.setAnimation(AnimationUtils
						.loadAnimation(this, R.anim.scale_in));
				imageView.setVisibility(View.VISIBLE);
			}else{
				imageView.setAnimation(AnimationUtils
						.loadAnimation(this, R.anim.scale_out));
				imageView.setVisibility(View.INVISIBLE);
			}
			break;
		case R.id.anim_translate:
			if(imageView.getVisibility()==View.INVISIBLE){
				imageView.setAnimation(AnimationUtils
						.loadAnimation(this, R.anim.translate_in));
				imageView.setVisibility(View.VISIBLE);
			}else{
				imageView.setAnimation(AnimationUtils
						.loadAnimation(this, R.anim.translate_out));
				imageView.setVisibility(View.INVISIBLE);
			}
			break;
		case R.id.anim_rotate:
			if(imageView.getVisibility()==View.INVISIBLE){
				imageView.setAnimation(AnimationUtils
						.loadAnimation(this, R.anim.rotate_in));
				imageView.setVisibility(View.VISIBLE);
			}else{
				imageView.setAnimation(AnimationUtils
						.loadAnimation(this, R.anim.rotate_out));
				imageView.setVisibility(View.INVISIBLE);
			}
			break;
		case R.id.anim_drawable:
			imageView2.setBackgroundResource(R.drawable.drawable_anim);
			AnimationDrawable animationDrawable = (AnimationDrawable) imageView2.getBackground();
//			animationDrawable.addFrame(getResources().getDrawable(R.drawable.pq1), 50);
//			animationDrawable.addFrame(getResources().getDrawable(R.drawable.pq2), 50);
//			animationDrawable.addFrame(getResources().getDrawable(R.drawable.pq3), 50);
			animationDrawable.start();
			break;
		default:
			break;
		}
	}

}


下面会有一个实例
分享到:
评论

相关推荐

    Android动画效果大全

    在Android开发中,动画效果是提升用户体验和应用视觉吸引力的关键元素。本文将深入探讨"Android动画效果大全",包括各种类型的动画以及如何基于这些技术实现炫酷的特效。 首先,Android提供两种主要的动画机制:帧...

    android动画效果集锦

    本篇将详细介绍如何在Android中实现PopupWindow、Activity的推出推入、缩放等动画效果。 首先,我们关注PopupWindow的动画效果。PopupWindow是一个可以浮现在Activity之上的窗口组件,通常用于创建下拉菜单、提示框...

    Android 动画效果集合

    在Android开发中,动画效果是提升用户体验的关键因素之一。Android 动画效果集合是一个资源库,专注于自定义动画,帮助开发者快速学习并实现各种动画效果,以满足在实际项目中的多样化需求。本资源集合通常会包含...

    Android动画效果的强悍框架

    首先,让我们了解Android中的基本动画类型。Android支持两种主要的动画机制:补间动画(Tween Animation)和帧动画(Frame Animation)。补间动画用于改变视图的位置、大小、透明度等属性,它通过在一段时间内平滑地...

    Android动画效果translate、scale、alpha、rotate详解

    "Android 动画效果translate、scale、alpha、rotate详解" Android 动画效果可以分为四种类型:translate、scale、alpha、rotate,每种类型都有其特点和应用场景。 一、translate 动画效果 translate 动画效果是...

    200多种Android动画效果的强悍框架

    在Android开发中,动画效果是提升用户体验的关键因素之一。本文将深入探讨一款强大的框架,它提供了超过200种不同的Android动画效果,帮助开发者轻松实现各种动态视觉效果,从而为用户带来更加生动、吸引人的应用...

    安卓源码包android 动画效果Android 烟花效果源码等21个合集.zip

    安卓源码包android 动画效果Android 烟花效果源码等21个合集: activity切换特效.rar Android Layout UI 首页加载过渡动画,星期变化动画.rar android 仿真翻页效果.rar Android 烟花效果源码.zip Android仿苹果的...

    Android动画效果包

    在Android开发中,动画效果是提升用户体验的关键因素之一。Android动画效果包集合了多种基本的动画效果,旨在帮助开发者轻松创建出丰富的用户交互界面。这个资源包中的动画效果经过精心设计,可以为你的应用程序增添...

    Android动画效果--渐变动画

    在Android开发中,动画效果是提升用户体验的关键因素之一。渐变动画是Android动画体系中的一种基本类型,它可以为用户界面带来生动和动态的感觉。本文将深入探讨四种主要的渐变动画:Alpha(透明度)、Scale(缩放)...

    史上最全的Android 动画效果

    在Android开发中,动画效果是提升用户体验的关键因素之一。这篇资料集合了史上最全的Android动画效果,涵盖了图片切换以及各种动态交互设计。以下是对这些关键知识点的详细解释: 1. **Android 动画效果**:Android...

    数百种Android动画效果源码

    这个名为"数百种Android动画效果源码"的项目,旨在提供一个丰富的动画库,帮助开发者快速理解和应用各种动画效果。下面将详细介绍这个项目中可能包含的知识点,并提供一些关于Android动画设计和实现的深入理解。 1....

    Android动画效果编程基础

    本文介绍了Android中动画的基本概念、逐帧动画与渐变动画的区别,并详细说明了在XML文件中以及Java代码中定义动画的具体方法。通过这些基础知识的学习,开发者可以更好地掌握Android动画技术,为应用程序添加更丰富...

    android动画效果animation

    在Android开发中,动画效果是提升用户体验的关键因素之一。Android提供了丰富的动画系统,使得开发者能够为应用程序添加各种动态效果,从而提高应用的交互性和吸引力。本文将深入探讨Android动画效果的使用,包括对...

    android动画效果编程基础

    在Android平台上,动画效果是提升用户体验的关键因素,它能让应用变得更加生动、有趣且吸引人。本文将深入探讨Android动画效果编程的基础知识,帮助你理解如何为Android应用添加各种炫酷的视觉效果。 首先,Android...

    Android动画效果集合开源APP

    在Android开发中,动画效果是提升用户体验的关键因素之一。"Android动画效果集合开源APP"是一个专为Android开发者设计的工具包,它集成了多种动画效果,帮助开发者轻松地在应用程序中实现丰富的动态视觉表现。这个...

    Android动画效果--FrameByFrame动画

    总结,FrameByFrame动画在Android中是一种简单且直观的实现动态效果的方式,尤其适合于创建像火焰这样的一系列连续变化的视觉效果。通过理解帧动画的工作原理和恰当的资源管理,开发者可以为用户带来更加生动有趣的...

    Android动画效果大全源码

    在Android开发中,动画效果是提升用户体验的关键因素之一。"Android动画效果大全源码"提供了一个丰富的资源库,包含了10多种不同的动画效果,适用于各种场景,如界面切换、按钮点击反馈、过渡动画等。这些动画效果...

    android 动画效果

    在Android平台上,动画效果是提升用户体验的关键因素之一。Android提供了丰富的动画系统,使得开发者能够创造出各种炫酷且交互性强的视觉效果。以下是对Android动画效果的详细解释: 1. **属性动画(Property ...

    Android 抖动动画效果

    首先,我们要知道在Android中,动画主要分为两种类型:补间动画(Tween Animation)和帧动画(Frame Animation)。抖动动画属于补间动画的一种,因为它涉及到对象的位置、大小或透明度等属性的变化。补间动画是通过...

    android 动画效果之Animation

    在Android中,动画主要分为两种类型:属性动画(Property Animation)和视图动画(View Animation)。视图动画是早期Android系统中提供的,它并不真正改变UI元素的状态,只是模拟动画效果。而属性动画自API 11...

Global site tag (gtag.js) - Google Analytics