`
landyer
  • 浏览: 141975 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Android 动画之Tween动画详细讲解及java源码实现

 
阅读更多

Tween动画又称“补间动画”、“中间动画”,这并不重要,就好像很多人都知道鲁迅,却不知道他叫:周树人。

 

   Tween动画在Android中分为4类,它们分别是:AlphaAnimation(透明度动画)、TranslateAnimation(平移动画)、ScaleAnimation(缩放动画)、RotateAnimation(旋转动画)。都继承自android.view.Animation类,它们都是表示从一个状态A向状态B变化的一个过程,所以英文名字叫Tween动画、中文名叫:“补间动画”、“中间动画”。它们总的说来有两种实现方式:java code(java源代码)、xml(xml配置文件),这里先从java code开始

 

   以前就是因为每中Tween动画都有很多构造函数不清楚,现在仔细看了下,记录下来方便以后查看

 

    AlphaAnimation(透明度动画)

 

    AlphaAnimation有两个构造函数,分别是:

 

                       —— AlphaAnimation(Context context, AttributeSet attrs):第二个参数是个属性集,之后会详细对AttributeSet 讲解

 

                       ——AlphaAnimation(float fromAlpha, float toAlpha):第一个参数是初始透明度,第二个参数是终止透明度

 

    TranslateAnimation(平移动画)

 

    TranslateAnimation有三个构造函数,分别是:

 

                       ——TranslateAnimation(Context context, AttributeSet attrs):略过

 

                       ——TranslateAnimation(float fromXDelta, float toXDelta, float fromYDelta, float toYDelta):分别对应x轴的起始、终点                                          坐标,与y轴的起始、终点坐标

 

                      ——TranslateAnimation(int fromXType, float fromXValue, int toXType, float toXValue, int fromYType, float fromYValue, int                                 toYType, float toYValue):第一个参数是x轴方向的值的参照(Animation.ABSOLUTE, Animation.RELATIVE_TO_SELF,                                 or Animation.RELATIVE_TO_PARENT);第二个参数是第一个参数类型的起始值;第三个参数与第四个参数是x轴方向的

 

                              终点参照与对应值;后面四个参数就不用解释了。如果全部选择Animation.ABSOLUTE,其实就是第二个构造函数。

 

                              以x轴为例介绍参照与对应值的关系

 

                              如果选择参照为Animation.ABSOLUTE,那么对应的值应该是具体的坐标值,比如100到300,指绝对的屏幕像素单位

 

                              如果选择参照为Animation.RELATIVE_TO_SELF或者 Animation.RELATIVE_TO_PARENT指的是相对于自身或父控件,

 

                              对应值应该理解为相对于自身或者父控件的几倍或百分之多少。一定要多试试这几个参数类型!

 

       ScaleAnimation(缩放动画)

 

       ScaleAnimation(缩放动画)有四个构造函数,分别是:

 

                       ——ScaleAnimation(Context context, AttributeSet attrs):略过

 

                       ——ScaleAnimation(float fromX, float toX, float fromY, float toY):同TranslateAnimation(float fromXDelta, float toXDelta,                                    float fromYDelta, float toYDelta)

 

                       ——ScaleAnimation(float fromX, float toX, float fromY, float toY, float pivotX, float pivotY):这里解释后面两个参数,pivot

 

                               英文意思为“枢轴”,也就是支点。通过这两个参数可以控制缩放动画的放大方向,这个点不会随对象大小变化而变化

 

                      ——ScaleAnimation(float fromX, float toX, float fromY, float toY, int pivotXType, float pivotXValue, int pivotYType, float                                       pivotYValue):如果理解了前面所讲的,这个就不做多的说明,如果不清楚,请回头多用代码试试。

 

        RotateAnimation(旋转动画)

 

         RotateAnimation(旋转动画)同样有四个构造函数,分别是:

 

                      ——RotateAnimation(Context context, AttributeSet attrs)

 

                     ——RotateAnimation(float fromDegrees, float toDegrees)

 

                     ——RotateAnimation(float fromDegrees, float toDegrees, float pivotX, float pivotY)

 

                     ——RotateAnimation(float fromDegrees, float toDegrees, int pivotXType, float pivotXValue, int pivotYType, float                                                pivotYValue)

 

                    这里不废话了!

 

说了这么多,直接上代码。

 

这里是Java源代码

 

 

package com.tfsp.training.testtweenanimation;

 

import android.app.Activity;

import android.os.Bundle;

import android.view.View;

import android.view.View.OnClickListener;

import android.view.animation.AlphaAnimation;

import android.view.animation.Animation;

import android.view.animation.RotateAnimation;

import android.view.animation.ScaleAnimation;

import android.view.animation.TranslateAnimation;

import android.widget.ArrayAdapter;

import android.widget.Button;

import android.widget.ImageView;

import android.widget.Spinner;

 

public class TestTweenAnimation extends Activity {

//定义开始按钮

private Button start = null;

//定义动画类型下拉列表

private Spinner select = null;

//这张图片是动画执行者

private ImageView img = null;

//定义动画

private Animation tAnimation = null;

//定义一个String数组用于构造下拉列表的适配器

private String str[] = {

"平移动画", "透明度动画", "旋转动画", "缩放动画"

};


    @Override

    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.main);

        //分别从xml文件中得到每个控件

        start = (Button) findViewById(R.id.startButton);

        select = (Spinner) findViewById(R.id.select);

        img = (ImageView) findViewById(R.id.img);

        //实例化适配器

        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, str);

        select.setAdapter(adapter);

        //为开始按钮设置监听

        start.setOnClickListener(new OnClickListener() {


@Override

public void onClick(View v) {

InitialAnimation();

img.startAnimation(tAnimation);

}

});

    }

    

    //初始化动画

    public void InitialAnimation(){

 

    switch(select.getSelectedItemPosition()){

    case 0:

    tAnimation = new TranslateAnimation(0, 300, 50, 50);

//    tAnimation = new TranslateAnimation(Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_SELF, 1.0f, Animation.RELATIVE_TO_PARENT, -0.5f, Animation.RELATIVE_TO_PARENT, -0.5f);

    break;

    case 1:tAnimation = new AlphaAnimation(0.1f, 1.0f);

    break;

    case 2:tAnimation = new RotateAnimation(0.0f, +360.0f);

    break;

    case 3:

//    tAnimation = new ScaleAnimation(0.0f, 1.0f, 0.0f, 1.0f);

    tAnimation = new ScaleAnimation(0.0f, 1.0f, 0.0f, 1.0f, 200.0f, 0.0f);

    break;

    }

    //为动画设置完成所需时间

    tAnimation.setDuration(2000);

    }

}
 

 

 

这里是main.xml

 

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

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="fill_parent"

    android:layout_height="fill_parent"

    >

    <Spinner

    android:id="@+id/select"

    android:layout_width="fill_parent"

    android:layout_height="wrap_content"

    />

    <Button

    android:id="@+id/startButton"

    android:layout_width="fill_parent"

    android:layout_height="wrap_content"

    android:layout_below="@id/select"

    android:text="开始播放"

    />

    <ImageView

    android:id="@+id/img"

    android:layout_width="wrap_content"

    android:layout_height="wrap_content"

    android:layout_alignParentBottom="true"

    android:src="@drawable/sun"

    />

</RelativeLayout>
 

 

 

 

 

 

分享到:
评论

相关推荐

    android 逐帧动画实现 源码

    以下步骤详细解释了如何创建和使用逐帧动画: 1. **资源准备**:将所有帧图片(例如,帧1.png、帧2.png、...)放入项目的`res/drawable`目录下,或者创建一个子目录(如`res/drawable/frame`)专门存放这些图片。 ...

    博客《Android动画之一:Drawable Animation》附带源码

    这篇博客《Android动画之一:Drawable Animation》深入探讨了如何利用Drawable资源创建动画,这是Android系统提供的基本动画类型之一。Drawable Animation主要适用于简单的帧动画,例如旋转、缩放或平移等效果。 在...

    Android 简单2D动画源码.rar

    下面将详细解释2D动画的基本概念、实现方式以及源码中的关键组件。 一、Android 2D动画类型 在Android中,2D动画主要分为两种类型: 1. **补间动画(Tween Animation)**:这种动画通过改变视图属性(如平移、旋转...

    Android 等待提示动画源码.rar

    首先,`readme.md`文件很可能是项目介绍或者使用指南,它会详细解释如何集成和使用这些动画源码。在Android开发中,`readme.md`文件是项目文档的重要组成部分,通常包含项目概述、安装步骤、API参考以及任何需要注意...

    android 自带的动画,实现左右切屏效果

    在Android开发中,动画是提升用户体验的关键因素之一。本文将深入探讨如何利用Android自带的动画系统来实现左右切屏效果,这种效果常见于许多应用的导航界面,如滑动菜单或者页面间的切换。我们将主要关注两个核心...

    Android应用源码之实现抖动窗口.zip

    这个压缩包“Android应用源码之实现抖动窗口.zip”包含了一些关于如何在Android应用中实现这种效果的源代码。 首先,抖动动画(Jitter Animation)通常通过Android的动画框架来实现,该框架提供了多种动画类型,如...

    安卓Android源码——实现抖动窗口.rar

    综上所述,实现安卓Android源码中的抖动窗口涉及到对Android动画系统,尤其是补间动画的理解,以及如何在代码中结合用户交互来触发动画。通过学习和实践,开发者能够增强用户界面的交互性和反馈效果。

    Android代码-animation的结合蝴蝶飞的动画使用动画里面的几种类型.zip

    在JavaApk源码说明.txt中可能详细解释了如何在XML中配置这些动画,并在代码中加载和播放。 通过学习这个ButterflyDemo,开发者可以掌握Android动画的多种实现方式,理解它们的工作原理,并能将这些技巧应用到自己的...

    Android程序研发源码Android 烟花效果源码.zip

    下面将详细解释这个源码中的关键知识点。 1. **Android Animation原理**: - Android动画主要包括Tween动画和Property Animation。Tween动画通过改变View的位置、大小、透明度等属性来实现动画效果,而Property ...

    Android代码-菜单动画(类似QQ空间)Demo.zip

    【Android动画库】 Android提供了多种动画类型,包括补间动画(Tween Animation)、帧动画(Frame Animation)和属性动画(Property Animation)。在这个Demo中,属性动画可能是关键,因为它允许对对象的属性进行...

    安卓动画效果相关-android布局旋转效果.rar

    在Android中,我们可以使用多种方式来实现布局或视图的旋转效果,这通常涉及到对Android动画API的运用。 首先,从文件名"Rotate3dAnim"来看,这可能是一个实现3D旋转动画的类或者示例代码。在Android中,我们可以...

    安卓动画效果相关-vectalign-samples变形动画.zip

    下载更多打包源码~.url 是一个链接,可能指向更多的Android动画相关的源码资源,供开发者进一步学习和实践。 在探索这些示例时,开发者需要了解Android Studio的环境配置,以及如何导入和运行外部项目。此外,理解...

    安卓Android源码——应用开发揭秘-书籍所需源码.zip

    10. **动画和过渡效果**:Android提供丰富的动画API,源码中可能包含Tween动画、属性动画的实现,以及如何使用Transition API实现视图间的过渡效果。 11. **Android框架与库的使用**:可能包含对第三方库如Glide...

    android简单旋转菜单

    本篇文章将详细讲解如何利用Android的动画系统来实现一个简单的旋转菜单,即“android简单旋转菜单”。我们将探讨旋转和移动动画的原理,以及如何将这些动画应用到菜单项上,以便在用户点击时呈现出动态效果。 首先...

    安卓Android源码——简单的图片轮播.zip

    Android提供了多种动画API,如Tween Animation(补间动画)和Property Animation(属性动画),可以用来实现这些效果。 7. **源码分析**: - "源码说明.txt"可能是对代码实现的简要说明,包括关键类和方法的作用,...

    Android应用源码之ListView滚动气泡提示.zip

    标题 "Android应用源码之ListView滚动气泡提示.zip" 暗示了这个压缩包包含了一个Android应用的源代码,其特色在于实现了一个ListView的滚动气泡提示功能。ListView是Android开发中常用的组件,用于展示大量的列表...

    疯狂Android讲义第二版光盘源码(第十六到十九章)

    此外,还会深入探讨Android的动画系统,包括补间动画(Tween Animation)和帧动画(Frame Animation),以及如何使用Property Animation实现更为复杂的动效。 第十七章可能涉及到“多媒体处理”。这里可能涵盖音频...

    Android 实现书籍翻页效果(升级版).zip

    本项目源码主要探讨如何利用Java语言在Android平台上实现这一功能。以下将详细讲解涉及的知识点及其重要性: 1. **自定义View**: 书籍翻页效果通常需要自定义一个View或 ViewGroup,以实现独特的动画效果。开发者...

    Android之Animation<2>

    由于没有提供具体的内容摘要,我将根据常见的Android动画知识点进行详细的解释。 首先,Android的动画系统主要分为三种类型: 1. **补间动画(Tween Animation)**: 这是最基础的动画形式,它可以改变视图的位置、...

Global site tag (gtag.js) - Google Analytics