`
qq986945193
  • 浏览: 89693 次
  • 性别: Icon_minigender_2
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

android开发之动画的详解 整理资料 Android开发程序小冰整理

 
阅读更多
/** * 作者:David Zheng on 2015/11/7 15:38 * *
网站:http://www.93sec.cc * *
微博:http://weibo.com/mcxiaobing * *
微博:http://weibo.com/93sec.cc */ 个人交流QQ986945193

一、分类:
(一)、概要:
3.0以前,android支持两种动画模式,补间动画(tween animation),帧动画(frame animation),在android3.0中又引入了一个新的动画系统:属性动画(property animation)。
这三种动画模式在SDK中被称为view animation,drawable animation,property animation。

(二)、动画资源分类:
  1. 属性动画:Property Animation
  2. 帧动画:Frame Animation (Drawable Animation)
  3. 补间动画:Tween Animation (View Animation)
    • 透明度补间动画
    • 缩放补间动画
    • 旋转补间动画
    • 移动补间动画

二、补间动画:
View Animation就是一系列View形状的变换,如大小的缩放、透明度的改变、位置的改变、旋转位置改变,动画的定义既可以用java代码定义也可以用XML定义。建议用XML定义。
用XML定义的动画放在/res/anim/文件夹内,XML文件的根元素为<set> , 二级节点可为<alpha>,<scale>,<translate>,<rotate>。
(一)、用xml资源实现补间动画:

(二)、用java代码实现补间动画:

public class MainActivity extends Activity {

private ImageView imageView_main;
private Animation animation = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);
imageView_main = (ImageView) findViewById(R.id.imageView_main);
}

public void clickButton(View view) {
switch (view.getId()) {
case R.id.button_main_alpha:
animation = new AlphaAnimation(0.0f, 1.0f);
break;
case R.id.button_main_scale: animation = new ScaleAnimation(0.0f, 1.0f, 0.0f, 1.0f, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 1.0f); break; case R.id.button_main_translate: animation = new TranslateAnimation(0, 150, 0, 0); break; case R.id.button_main_rotate: animation = new RotateAnimation(0, 360, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 1.0f); break;
default: break; }
animation.setDuration(3000);
imageView_main.setAnimation(animation);
}
}


三、帧动画:
Frame Animation(AnimationDrawable对象):帧动画,就像GIF图片,通过一系列Drawable依次显示来模拟动画的效果。
必须以<animation-list>为根元素,以<item>表示要轮换显示的图片,duration属性表示各项显示的时间。XML文件要放在/res/anim/或者/res/animator或者/res/drawable目录下。
(一)、实例代码:
一、res/anim/frame_animation.xml的代码:


<animation-listxmlns:android="http://schemas.android.com/apk/res/android"

android:oneshot="true">

<itemandroid:drawable="@drawable/anim1"android:duration="50"/>

<itemandroid:drawable="@drawable/anim2"android:duration="50"/>

<itemandroid:drawable="@drawable/anim3"android:duration="50"/>

<itemandroid:drawable="@drawable/anim4"android:duration="50"/>

<itemandroid:drawable="@drawable/anim5"android:duration="50"/>

<itemandroid:drawable="@drawable/anim6"android:duration="50"/>

<itemandroid:drawable="@drawable/anim7"android:duration="50"/>

<itemandroid:drawable="@drawable/anim8"android:duration="50"/>

<itemandroid:drawable="@drawable/anim9"android:duration="50"/>

<itemandroid:drawable="@drawable/anim10"android:duration="50"/>

<itemandroid:drawable="@drawable/anim11"android:duration="50"/>

<itemandroid:drawable="@drawable/anim12"android:duration="50"/>

</animation-list>


二、MainActivity.java代码:
publicclassMainActivityextendsActivity {

privateImageViewimageView_main_show;

privateAnimationDrawableanimationDrawable=null;


@Override

protectedvoidonCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);


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

imageView_main_show.setBackgroundResource(R.anim.frame_animation);

animationDrawable= (AnimationDrawable)imageView_main_show.getBackground();

}


publicvoidclickButton(View view) {

switch(view.getId()) {

caseR.id.button_main_start:

if(!animationDrawable.isRunning()) {

//一组动画是否只播放一次

animationDrawable.setOneShot(false);

animationDrawable.start();

}

break;

caseR.id.button_main_stop:

if(animationDrawable.isRunning()) {

animationDrawable.stop();

}

break;

}

}


@Override

publicvoidonWindowFocusChanged(booleanhasFocus) {

super.onWindowFocusChanged(hasFocus);

if(!animationDrawable.isRunning()) {

animationDrawable.setOneShot(false);

animationDrawable.start();

}

}

}



【备注:】
SDK中提到,不要在onCreate()中调用start(),因为AnimationDrawable还没有完全跟Window相关联,如果想要界面显示时就开始动画的话,可以在onWindowFoucsChanged()中调用start()。


四、属性动画:
(一)、概念:
属性动画,这个是在Android 3.0中才引进的。Property Animation故名思议就是通过动画的方式改变对象的属性.属性动画更改的是对象的实际属性,在View Animation(Tween Animation)中,其改变的是View的绘制效果,真正的View的属性保持不变
比如无论如何缩放Button的大小,Button的有效点击区域还是没有应用动画时的区域,其位置与大小都不变。而在Property Animation中,改变的是对象的实际属性,如Button的缩放,Button的位置与大小属性值都改变了。
Property Animation不止可以应用于View,还可以应用于任何对象。Property Animation只是表示一个值在一段时间内的改变,当值改变时要做什么事情完全是你自己决定的。

(二)、常用属性:
  1. Duration动画的持续时间,默认300ms。
  2. Time interpolation:时间插值。LinearInterpolator、AccelerateDecelerateInterpolator,定义动画的变化率。
  3. Repeat count and behavior:重复次数、以及重复模式;可以定义重复多少次;重复时从头开始,还是反向。
  4. Animator sets:动画集合,你可以定义一组动画,一起执行或者顺序执行。
  5. Frame refresh delay:帧刷新延迟,对于你的动画,多久刷新一次帧;默认为10ms,但最终依赖系统的当前状态;基本不用管。
(三)、相关的类:
  1. ObjectAnimator动画的执行类(常用属性:alpha,rotation,rotationX,rotationY,translationX,translationY,scaleX,scaleY)
  2. ValueAnimator动画的执行类
  3. AnimatorSet用于控制一组动画的执行:线性,一起,每个动画的先后执行等。
  4. AnimatorInflater用户加载属性动画的xml文件
  5. TypeEvaluator类型估值,主要用于设置动画操作属性的值。
  6. TimeInterpolator时间插值
  • 总的来说,属性动画就是,动画的执行类来设置动画操作的对象的属性、持续时间,开始和结束的属性值,时间差值等,然后系统会根据设置的参数动态的变化对象的属性。

(一)、实例代码:
一、res/anim/property_anim.xml的代码:

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

android:ordering="sequentially">

<objectAnimator

android:duration="4000"

android:propertyName="x"

android:valueTo="300"

android:valueType="intType"/>

<objectAnimator

android:duration="4000"

android:propertyName="y"

android:valueTo="400"

android:valueType="intType"/>

<objectAnimator

android:duration="4000"

android:propertyName="x"

android:valueTo="0"

android:valueType="intType"/>

<objectAnimator

android:duration="4000"

android:propertyName="y"

android:valueTo="0"

android:valueType="intType"/>

</set>


二、MainActivity.java代码:

publicclassMainActivityextendsActivity {

privateImageViewimageView_main_obj;

privateMovemove;


@Override

publicvoidonCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

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

move=newMove();


imageView_main_obj.setOnClickListener(newOnClickListener() {

@Override

publicvoidonClick(View v) {

setTitle(move.getX() +":"+move.getY());

}

});

}


classMove {

privateinty;

privateintx;


publicintgetY() {

returny;

}


publicvoidsetY(inty) {

this.y= y;

imageView_main_obj.layout(imageView_main_obj.getLeft(), y,imageView_main_obj.getRight(),y +imageView_main_obj.getMeasuredHeight());

}

publicintgetX() {

returnx;

}


publi cvoidsetX(intx) {

this.x= x;

imageView_main_obj.layout(x,imageView_main_obj.getTop(), x+imageView_main_obj.getMeasuredWidth(),imageView_main_obj.getBottom());

}

}


publicvoidclickButton(View view) {

// 装载属性动画资源

AnimatorSet set = (AnimatorSet) AnimatorInflater.loadAnimator(this,

R.animator.property_anim);

// 设置要控制的对象

set.setTarget(move);

// 开始动画

set.start();

}

}


【备注说明:】

<objectAnimator

android:duration="4000"

android:propertyName="x"

android:valueTo="300"

android:valueType="intType"/>


【备注:】
  • android:ordering说明一系列动画动作的执行顺序,有两个选择:sequentially 和together,顺序执行还是一起执行;
  • objectAnimator 是设定动画实施的对象;
  • duration是该动画动作执行从开始到结束所用的时间;
  • android:repeatCount="infinite" 可以是整数或者infinite
  • android:repeatMode="restart" 可以是restart 或者 reverse
  • android:valueFrom=" " 整数|浮点数|颜色
/** * 作者:David Zheng on 2015/11/7 15:38 * *

网站:http://www.93sec.cc * *

微博:http://weibo.com/mcxiaobing * *

微博:http://weibo.com/93sec.cc */ 个人交流QQ986945193

分享到:
评论

相关推荐

    Android开发应用实战详解

    《Android开发应用实战详解》是一本深度探讨Android应用程序开发的专著,旨在为开发者提供全面且深入的指导。这本书详细阐述了Android平台的基础知识、核心组件以及实际开发中的技巧和最佳实践,帮助读者从入门到...

    Android游戏开发技术实战详解

    资源名称:Android游戏开发技术实战详解 内容简介:《Android游戏开发技术实战详解》详细讲解了Android游戏开发技术的基本知识。《Android游戏开发技术实战详解》内容新颖、知识全面、讲解详细,《Android游戏开发...

    Android应用开发详解.pdf

    根据提供的标题“Android应用开发详解.pdf”以及描述“Android应用开发详解.pdf”,我们可以推断这份文档主要涵盖了关于Android平台上的应用程序开发的相关知识和技术。虽然提供的部分内容似乎并不包含具体的信息,...

    《Android应用开发详解》源码

    《Android核心技术和开发详解》各章案例的全部源代码,第一章将要介绍的是Android开发起步的相关知识,首先对Android平台进行简单的介绍,其中包括Android的背景及其应用程序的框架。然后会向读者讲解如何搭建....

    android网络开发与应用实战详解源码

    在Android平台上进行网络开发是一项核心技能,特别是在构建功能丰富的移动应用程序时。《Android网络开发与应用实战详解》一书深入浅出地介绍了Android系统中如何实现网络通信,并提供了丰富的源码示例。这本书涵盖...

    android应用开发详解

    《Android应用开发详解》这本书是为初学者量身打造的一本指南,旨在深入浅出地介绍Android应用开发的各个环节。Android开发是一个庞大且复杂的领域,涵盖了许多不同的技术和工具,但本书将带你逐步走进这个领域,从...

    Android 底层接口与驱动开发技术详解 相关资料

    总的来说,"Android 底层接口与驱动开发技术详解"涵盖了Android系统的多个关键层面,包括硬件驱动的编写、HAL的设计、JNI的应用以及系统服务的理解。通过学习这些内容,开发者能够提升对Android系统的整体认知,从而...

    Android 底层接口与驱动开发技术详解

    《Android 底层接口与驱动开发技术详解》是一本深入探讨Android系统底层接口和驱动开发的专业书籍,适合对Android系统有深入研究需求的开发者阅读。本书涵盖了从硬件抽象层(HAL)到用户空间驱动,再到应用程序接口...

    Android驱动开发与移植实战详解_android驱动_android驱动_android_

    在Android系统中,驱动程序是操作系统与硬件之间的重要桥梁,它们负责管理硬件资源,提供高效、稳定的服务。本文将深入探讨Android驱动开发与移植的实战细节,帮助开发者理解和掌握这一关键技能。 一、Android驱动...

    Android应用程序开发

    ### Android应用程序开发知识点详解 #### 一、Android概述 Android是一种基于Linux内核的开源移动设备操作系统,由Google公司和开放手机联盟领导及开发。它主要用于触摸操作的手持设备上,如智能手机和平板电脑等...

    Android应用开发详解pdf

    《Android应用开发详解》是一本深受开发者欢迎的入门书籍,主要针对想要学习和掌握Android应用程序开发的初学者。这本书深入浅出地介绍了Android平台的基本概念、开发环境搭建、UI设计、数据存储、网络通信以及...

    android 项目开发详解代码

    "android 项目开发详解代码" 提供了一套完整的开发实例,旨在帮助学习者深入理解Android应用的生命周期、用户界面设计、数据存储、网络通信等核心概念。这份教材通过实际的代码示例,使得理论知识与实践相结合,有助...

    Android应用开发详解2010版

    《Android应用开发详解2010版》是针对早期Android平台的一份详尽教程,旨在帮助开发者深入理解和实践Android应用程序的开发。这份资料的核心内容涵盖了Android应用开发的基础知识、核心概念以及当时的最新技术。 ...

    android应用开发详解 郭宏志

    《Android应用开发详解》是郭宏志先生撰写的一本深入探讨Android应用开发的书籍,它为读者提供了全面、详实的Android开发知识。通过这本书,开发者可以了解到Android平台的架构、核心组件以及如何构建功能丰富的应用...

    Android自定义组件开发详解.docx

    【Android自定义组件开发详解】 Android自定义组件的开发是Android应用开发中的一个重要部分,它涉及到自定义View和ViewGroup的创建,以及对canvas和paint的深入理解和运用。自定义组件能够满足开发者对于UI设计的...

    Android 典型技术模块开发详解 pdf

    《Android典型技术模块开发详解》这本书是为初入Android开发领域的工作者量身打造的指南,旨在帮助读者深入理解和掌握Android各个关键模块的开发技术。在本文中,我们将详细探讨书中可能涉及的重要知识点,并尽可能...

    android开发应用实战详解源码

    总而言之,《Android开发应用实战详解源码》是一份全面的参考资料,它不仅解释了Android开发的基本概念,还通过实际示例让你深入了解每个知识点的具体应用。无论你是新手还是资深开发者,都能从中受益匪浅,提升你的...

    Android应用开发详解-附源码

    《Android应用开发详解》是郭宏志先生撰写的一本深入探讨Android应用开发的专业书籍,它为初学者和有经验的开发者提供了丰富的知识和实践经验。这本书不仅涵盖了基础理论,还包含了实际项目的源码,使得读者能够通过...

Global site tag (gtag.js) - Google Analytics