`
woshixushigang
  • 浏览: 582057 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类

Android动画详细探究

阅读更多

Android动画详细探究

Animation是一个用于View,Surfaces和其它对象实现动画效果的抽象类,其中常用的类是TranslateAnimation用于控制位置的改变

  一下列出一些重要的属性和方法

Xml属性

android:duration:运行动画的时间

android:interpolator定义用于平滑动画运动的时间内插

android:repeatCount:定义动画重复的时间

方法:

set:RepeatCount(int ):定义动画重复的时间

setRepeatMode(int):通过设置重复时间定义动画的行为

setStartOffsetlong):以毫秒为单位的动画运行前的延迟,一旦开始时间就达到了

Cancel():取消动画

hasStarted():判断动画是否已在运行

initialize(int width, int height, int parentWidth, int parentHeight):初始化动画

reset():重置动画

Start()启动动画

其中还有一些常量

RESTART:重新运行

INFINITE:永无终止地运行

 

 

将动画用于指定的控件,所有继承自View的控件都有startAnimation(Animation)方法,通过调用此方法来应用动画于控件

 

AnimationUtils类介绍

为应用动画提供了通用的的方法,它有一个很重要的方法loadAnimation(Context,Animation)用于加载Animation的实例。

 

下面是一个实例 源码下载

 

Animationpage.xml是布局文件

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

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

    android:orientation="vertical"

    android:padding="10dip"

    android:layout_width="match_parent"

    android:layout_height="wrap_content">

    

    <ImageView android:id="@+id/pw"

    android:background="@drawable/a"

        android:layout_width="match_parent"

        android:layout_height="wrap_content"

       android:layout_marginBottom="10dip"

    />

 

    <Button android:id="@+id/login"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:textSize="26sp"

        android:text="震荡"

    />

 

<ViewFlipper android:id="@+id/flipper"

        android:layout_width="match_parent"

        android:layout_height="wrap_content"

        android:flipInterval="2000"

         >

                <TextView

                        android:layout_width="match_parent"

                        android:layout_height="wrap_content"

                        android:gravity="center_horizontal"

                        android:textSize="26sp"

                        android:text="吴建强"/>

                <TextView

                        android:layout_width="match_parent"

                        android:layout_height="wrap_content"

                        android:gravity="center_horizontal"

                        android:textSize="26sp"

                        android:text="李秀婷"/>

                <TextView

                        android:layout_width="match_parent"

                        android:layout_height="wrap_content"

                        android:gravity="center_horizontal"

                        android:textSize="26sp"

                        android:text="张美静"/>

                <TextView

                        android:layout_width="match_parent"

                        android:layout_height="wrap_content"

                        android:gravity="center_horizontal"

                        android:textSize="26sp"

                        android:text="吴美音"/>

    </ViewFlipper>

 

    <TextView

        android:layout_width="match_parent"

        android:layout_height="wrap_content"

        android:layout_marginBottom="5dip"

        android:text="请选择你喜欢的人"

    />

 

    <Spinner android:id="@+id/spinner"

        android:layout_width="match_parent"

        android:layout_height="wrap_content"

    />

    

     <TextView

        android:id="@+id/target"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:textSize="26sp"

        android:text="java语言"/>

 

    <TextView

        android:layout_width="match_parent"

        android:layout_height="wrap_content"

        android:layout_marginTop="20dip"

        android:layout_marginBottom="5dip"

        android:text="C#语言" />

 

    <Spinner

        android:id="@+id/spinner1"

        android:layout_width="match_parent"

        android:layout_height="wrap_content" />

</LinearLayout>

 

Animlayout.xml是动画文件

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

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

android:fromXDelta="0" 

android:toXDelta="10" 

android:duration="1000" 

android:interpolator="@anim/cycle_7" />

 

。。。

  

主程序

package wjq.WidgetDemo;

 

import android.app.Activity;

import android.os.Bundle;

import android.util.Log;

import android.view.View;

import android.view.View.OnClickListener;

import android.view.animation.Animation;

import android.view.animation.AnimationUtils;

import android.view.animation.Transformation;

import android.view.animation.TranslateAnimation;

import android.widget.AdapterView;

import android.widget.ArrayAdapter;

import android.widget.Spinner;

import android.widget.ViewFlipper;

import android.widget.AdapterView.OnItemSelectedListener;

 

/**

 * 动画Animation示例

 * @author 记忆的永恒

 *

 */

public class AnimationDemo extends Activity implements OnClickListener,

OnItemSelectedListener {

 

private View v;

private String[] mStrings = { "向上", "向右", "穿越",

"旋转" };

 

private static final String[] INTERPOLATORS = { "加速", "Decelerate",

"减速", "左右", "Overshoot",

"Anticipate/Overshoot", "弹回" };

private ViewFlipper mFlipper;

private Spinner spinner;

private Spinner spinner1;

private ArrayAdapter<String> aa;

private ArrayAdapter<String> aa1;

/*

 * (non-Javadoc)

 * 

 * @see android.app.Activity#onCreate(android.os.Bundle)

 */

@Override

protected void onCreate(Bundle savedInstanceState) {

// TODO Auto-generated method stub

super.onCreate(savedInstanceState);

setContentView(R.layout.animationpage);

v = findViewById(R.id.login);

v.setOnClickListener(this);

mFlipper = (ViewFlipper) findViewById(R.id.flipper);

 

// 反转

mFlipper.startFlipping();

 

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

 aa = new ArrayAdapter<String>(this,

android.R.layout.simple_spinner_item, mStrings);

aa.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

spinner.setAdapter(aa);

spinner.setOnItemSelectedListener(this);

 

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

 aa1 = new ArrayAdapter<String>(this,

android.R.layout.simple_spinner_item, INTERPOLATORS);

aa1.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

spinner1.setAdapter(aa1);

spinner1.setOnItemSelectedListener(this);

}

 

@Override

public void onClick(View v) {

Animation shake = AnimationUtils.loadAnimation(this, R.anim.animlayout);

findViewById(R.id.pw).startAnimation(shake);

}

 

@Override

public void onItemSelected(AdapterView<?> parent, View view, int position,

long id) {

if (parent.getAdapter()==aa) {

switch (position) {

 

case 0:

mFlipper.setInAnimation(AnimationUtils.loadAnimation(this,

R.anim.push_up_in));

mFlipper.setOutAnimation(AnimationUtils.loadAnimation(this,

R.anim.push_up_out));

break;

case 1:

mFlipper.setInAnimation(AnimationUtils.loadAnimation(this,

R.anim.push_left_in));

mFlipper.setOutAnimation(AnimationUtils.loadAnimation(this,

R.anim.push_left_out));

break;

case 2:

mFlipper.setInAnimation(AnimationUtils.loadAnimation(this,

android.R.anim.fade_in));

mFlipper.setOutAnimation(AnimationUtils.loadAnimation(this,

android.R.anim.fade_out));

break;

default:

mFlipper.setInAnimation(AnimationUtils.loadAnimation(this,

R.anim.hyperspace_in));

mFlipper.setOutAnimation(AnimationUtils.loadAnimation(this,

R.anim.hyperspace_out));

break;

}

}

 

else {

final View target = findViewById(R.id.target);

final View targetParent = (View) target.getParent();

Animation anm = new TranslateAnimation(0.0f, targetParent

.getWidth()

- target.getWidth()

- targetParent.getPaddingLeft()

- targetParent.getPaddingRight(), 0.0f, 0.0f);

 

anm.setDuration(1000);

anm.setStartOffset(300);

anm.setRepeatMode(Animation.RESTART);

anm.setRepeatCount(Animation.INFINITE);

 

switch (position) {

            case 0:

             anm.setInterpolator(AnimationUtils.loadInterpolator(this,

                        android.R.anim.accelerate_interpolator));

                break;

            case 1:

             anm.setInterpolator(AnimationUtils.loadInterpolator(this,

                        android.R.anim.decelerate_interpolator));

                break;

            case 2:

             anm.setInterpolator(AnimationUtils.loadInterpolator(this,

                        android.R.anim.accelerate_decelerate_interpolator));

                break;

            case 3:

             anm.setInterpolator(AnimationUtils.loadInterpolator(this,

                        android.R.anim.anticipate_interpolator));

                break;

            case 4:

             anm.setInterpolator(AnimationUtils.loadInterpolator(this,

                        android.R.anim.overshoot_interpolator));

                break;

            case 5:

             anm.setInterpolator(AnimationUtils.loadInterpolator(this,

                        android.R.anim.anticipate_overshoot_interpolator));

                break;

            case 6:

             anm.setInterpolator(AnimationUtils.loadInterpolator(this,

                        android.R.anim.bounce_interpolator));

                break;

        }

 

target.startAnimation(anm);

}

 

}

 

@Override

public void onNothingSelected(AdapterView parent) {

// TODO Auto-generated method stub

 

}

 

}



 



 

分享到:
评论

相关推荐

    Android动画详细探究.zip

    总的来说,"Android动画详细探究.zip"资料包将带你深入理解Android动画的各个方面,包括基础和高级概念,以及如何在实践中运用。通过"WidgetDemo"的实例,你可以直观地看到动画在实际应用中的效果,从而提升你的...

    Android 关于 Activity 之间的切换动画

    本篇文章将深入探讨如何在Android中实现Activity之间的切换动画,以及涉及到的相关源码和技术工具。 首先,Activity的切换动画主要通过Android的Transition API来实现。Transition API允许开发者自定义进入、退出、...

    旋转动画.zip安卓程序源码资源下载

    这个"旋转动画.zip"资源包提供了一套用于Android程序的源码示例,旨在帮助学生、程序员和新手深入理解Android中的旋转动画实现。以下将详细讲解与这个源码相关的知识点: 1. **Android动画系统**:Android提供了两...

    android面试题大全及答案

    在Android中,Activity、Adapter和View可以视为MVC模式的实现,Activity作为Controller,Model通常涉及数据存储,View负责显示。 9. **Activity的生命周期** - Activity的生命周期由系统管理,包括onCreate()、...

    应用源码之(Animation动画).zip

    在Android开发中,动画(Animation)是至关重要的一个部分,它为用户界面提供了生动和吸引人的交互体验。本文将深入探讨Android源码中的动画机制,包括基本动画、属性动画以及如何在实际项目中运用这些技术。 一、...

    安卓Android源码——animation.rar

    在安卓(Android)平台上,动画(Animation)是用户体验设计中的重要组成部分,它可以为...在分析“animation.rar”压缩包中的源码时,可以参照这些知识点,探究其实现细节,学习如何将动画功能融入到自己的项目中。

    EuclidDemo.zip

    在Android UI动画中,我们可以看到几个关键的技术点: 1. **视差滚动**:当用户滚动界面时,不同元素以不同的速度移动,营造出深度感,增加立体体验。 2. **自定义ViewGroup**:通过自定义 ViewGroup,可以实现更...

    android RPG 游戏源码

    源码中涉及到的图形渲染部分,包括UI设计、精灵动画、碰撞检测等,都是Android游戏开发中的关键技术。我们可以从中了解到如何使用Android的Canvas和Bitmap进行2D图形绘制,以及如何利用OpenGL ES实现更复杂的3D效果...

    Android 开发入门与实践 配套源码

    9. **广播接收者(BroadcastReceiver)**:广播是Android中的一种全局事件通知机制。源码中可能包含自定义BroadcastReceiver的例子,展示如何监听和响应系统或自定义广播。 10. **通知(Notifications)**:通知用于在...

    Android小游戏连连看源码

    《Android小游戏连连看源码详解》 在移动设备上,小游戏因其轻松有趣、易于上手的特点,深受用户喜爱。作为一款经典的小游戏,连连看在...总的来说,这个源码是Android小游戏开发的绝佳学习实例,值得深入探究。

    深入理解Android5源代码

    《深入理解Android5源代码》是一本专注于解析Android 5.0系统内核与框架的专著,旨在帮助开发者和爱好者深入探究这个广泛使用的移动操作系统。Android 5.0,代号“Lollipop”,带来了诸多重要的改进和优化,包括性能...

    android-motion-detection-master源码

    【标题】"android-motion-detection-...通过深入探究"android-motion-detection-master"源码,开发者不仅可以学习到运动检测技术,还能掌握Android平台上的软件开发实践,这将对个人技能的提升和职业发展大有裨益。

    Android 象棋游戏源代码

    4. **事件监听**:在Android中,通常通过OnClickListener、OnTouchListener等接口来监听用户的操作。在象棋游戏中,需要处理棋子的拖放事件,以及判断是否合法落子。 5. **Activity和Fragment管理**:游戏可能包含...

    安卓Android源码——捕鱼达人源代码.zip

    通过分析和学习这个源码,开发者可以了解到如何在Android平台上构建一个完整的游戏应用,包括游戏逻辑、用户界面设计、数据管理、动画效果等方面的知识。 【标签】"android 源码 安卓" 明确了该源码的主要技术领域...

    android 7.1 源码附带例子——3

    在Android 7.1.2的源码中,我们可以深入探究这个移动操作系统的内部机制,这对于开发者来说是一个宝贵的资源,尤其是对于那些希望优化应用性能、理解系统底层工作原理或者进行自定义修改的人来说。本篇文章将重点...

    Android应用源码Adroid UI 界面绘制原理分析.zip

    在Android应用开发中,UI界面绘制是至关重要的一个环节,它直接影响到用户的交互体验和应用的整体视觉效果。本文将深入探讨Android UI界面的绘制原理,通过源码分析,帮助开发者理解这一过程的内部机制。 首先,...

    android gallery demo

    从提供的文件名来看,我们可以看到一些关于`Gallery`的源码解析和探究文章,如"使用Android自带Gallery组件实现CoverFlow",这可能涉及到将`Gallery`组件改造为更复杂的CoverFlow效果,类似于iPod的封面翻转。...

    android源码之会说话的汤姆猫.zip

    如今,我们有机会深入探究其背后的Android源码,了解游戏的运作机制和编程技巧,这对于Android开发者尤其是游戏开发爱好者来说,是一份宝贵的学习资料。 首先,我们要明白Android游戏开发的基础是Java语言,因此,...

    Android应用源码之MyImageView2.zip

    1. 自定义View基础:在Android中,自定义View通常是为了满足特定的设计需求或扩展原生View的功能。MyImageView2可能包含了对默认ImageView的一些扩展,如手势操作、动画效果、图片处理等。自定义View需要重写onDraw...

Global site tag (gtag.js) - Google Analytics