- 浏览: 329041 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
jnssvh:
楼主,还发代码吗?jnssvh@aliyun.com
SurfaceView简单例子 -
hou_anne:
讲解的非常详细
Android TabActivity实现多页显示效果 -
小鱼小鹰:
现在还能吗。。。296252344@qq.com
自定义控件(SurfaceView与view结合) -
flyar:
你好!我按照你的代码实现多点广播,但是在一台机子休眠,另一台手 ...
UDP广播与多播简单实现 -
herber2010:
图有错误~~
java实现快速排序
半小时搞定Android Animation 之一
作者:Legend
QQ:158067568
Android提供了两种动画的机制,可以通过SurfaceView来一帧一帧的绘制,同样也可以通过Animation机制。
Animations分类
Animations分为两种机制:Tweened Animations和Frame-by-FrameAnimations。
Tweened类似于flash,通过旋转、移动、缩放等实现动画效果,而Frame-by-FrameAnimations是类似于电影,通过改变每一帧的显示来实现动画效果。
其实Animation就是先写好对象要发生的动作,比如说平移,变形等。然后你需要哪个View或者View的子类,来完成这些预定义好的动作,只要给他们添加,就可以了。这部分的内容还是蛮多的,但是相对简单,本节只介绍Tweened Animations。
Tweened Animations
如图1所示,Tweened Animations有如下四种方式实现动画,对于每一种方式,Android都提供了一个类来实现。AlphaAnimation, AnimationSet, RotateAnimation, ScaleAnimation, TranslateAnimation 。
图1 Tweened Animations四种方式实现动画
对于每一种,笔者都会给出例子来详细解释。出于由简到难的考虑,首先介绍Alpha。
Alpha
alpha这个词详细如果有过opengl 开发经验的朋友一定不会陌生,没错,他就是设置透明度的。让我们先看一组图标,这样你就会加深对alpha的认识。如图2所示,实现了透明度变化的图标和按钮的效果。
图2 颜色渐变demo
如果要实现view的透明度变化,就要去实现alpha 的Animation。具体方法分为如下4部分:
q 实例化AnimationSet对象
q 实例化Animation对象
q 设置Animation对象属性
q 为View添加AnimationSet
这里要强调的就是Animation的构造方法如下:
AlphaAnimation aa = new AlphaAnimation(1, 0);//2.创建需要的animation
相对来说,alpha的构造方法最为简单。其第一个参数是出示时的透明度,0为完全透明,1为不透明。第二个参数为动画结束时的透明度。
aa.setDuration(2000);//设置动画的时间
通过上面这句可以设置动画播放的时间。
具体代码我会在最后给出。
Scale
scale为缩放,在了解Scale之前我们先看看其运行效果。如图3所示。
图3 scale demo
以上是Scale最简单的构造方法:
ScaleAnimation aa = new ScaleAnimation(1, 2, 1, 2);//2.创建需要的animation,这种构造方法是以自身为pivot
q 第1个参数为初始时x的大小,其中1为自身长度,同一2为自身长度的2倍,下同
q 第2个参数为结束动画时x的大小
q 第3个参数为初始时y的大小
q 第4个参数为结束动画时y的大小
如果你以为你已经学会了Scale,那我只能说你是浅尝辄止。下面介绍其另一个构造方法,该方法更加灵活。
ScaleAnimation aa = new ScaleAnimation(0, 1, 0, 1, Animation.RELATIVE_TO_PARENT, 0.5f, Animation.RELATIVE_TO_PARENT, 0.5f);
q 其四个参数同上,不解释
q 第五个参数是设置枢轴,可以是以自身,亦可以使用父view的,甚至可以谁用绝对数值。这里之后会解释。如果不明白可先忽略。
q 第六个参数是设置x枢轴的坐标。
q 接下来的两个参数同上,是设置y坐标的。
也许这里读者肯定不会明白枢轴的意思,那么我就用上面的方法来构造Animation并运行看看效果。请看图4.
图4 scale Demo2
如图所示,View控件在自身大小变化的同时,位置也在改变。后面的几个参数是设置其初始位置。如果以父view为参考,值为0.5f的话,那么就是当前父View的中间。
读者可能会问到,怎么不是屏幕的中心位置,我认为他是根据布局文件来决定位置的,当前的布局文件为LinearLayout,其设置为向下一次添加内容,如果设置y坐标为0.5f,则Android会认为你是要在当前布局接下来添加内容的位置的y轴中间。
Transfer
如果明白了枢轴的概念,那么Transfer平移就很简单了,如图5所示,为平移的例子。
图5 平移 demo
以上平移的实例化方法如下:
TranslateAnimation aa = new TranslateAnimation(Animation.RELATIVE_TO_PARENT, 0, Animation.RELATIVE_TO_PARENT, 1, Animation.RELATIVE_TO_PARENT, 0, Animation.RELATIVE_TO_PARENT, 1);
读者结合api,相信理解这个方法应该还是比较容易的,这里就不在赘述,如果有问题,可以给留言。
Rotate
旋转,这个也是比较容易,看演示,如图6所示。
图6 旋转demo
其构造方法如下:
RotateAnimation aa = new RotateAnimation(0, 270, Animation.RELATIVE_TO_PARENT, 0.2f, Animation.RELATIVE_TO_PARENT, 0.2f);
综合
Animation不但可以单独使用,还可以设置多个Animation然后添加到AnimationSet中。在对View调用,在例子中我给出了一个综合的例子,读者自行查看,检测自己是否已经明白这块知识。
代码
本节参考AnimationDemo1例子。
限于本人水平有限,如有不足之处,请多多指正。
<?xml version="1.0" encoding="utf-8"?> <ScrollView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" > <LinearLayout android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <Button android:text="alpha" android:id="@+id/Button01" android:layout_width="wrap_content" android:layout_height="wrap_content"> </Button> <ImageView android:id="@+id/iv1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src = "@drawable/icon" > </ImageView> <Button android:text="scale" android:id="@+id/Button02" android:layout_width="wrap_content" android:layout_height="wrap_content"> </Button> <ImageView android:id="@+id/iv2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src = "@drawable/icon" > </ImageView> <Button android:text="rotate" android:id="@+id/Button03" android:layout_width="wrap_content" android:layout_height="wrap_content"> </Button> <ImageView android:id="@+id/iv3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src = "@drawable/icon" > </ImageView> <Button android:text="transf" android:id="@+id/Button04" android:layout_width="wrap_content" android:layout_height="wrap_content"> </Button> <ImageView android:id="@+id/iv4" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src = "@drawable/icon" > </ImageView> <Button android:text="complex" android:id="@+id/Button05" android:layout_width="wrap_content" android:layout_height="wrap_content"> </Button> <ImageView android:id="@+id/iv5" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src = "@drawable/icon" > </ImageView> </LinearLayout> </ScrollView>
package cn.edu.heut.zcl; 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.AnimationSet; import android.view.animation.RotateAnimation; import android.view.animation.ScaleAnimation; import android.view.animation.TranslateAnimation; import android.widget.Button; import android.widget.ImageButton; import android.widget.ImageView; public class DemoActivity extends Activity implements OnClickListener{ /** Called when the activity is first created. */ Button alphaBut ; Button scaleBut ; Button rotateBut ; Button transfBut ; Button complexBut ; ImageView iv1; ImageView iv2; ImageView iv3; ImageView iv4; ImageView iv5; AnimationSet as ; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); alphaBut = (Button)findViewById(R.id.Button01); scaleBut = (Button)findViewById(R.id.Button02); rotateBut = (Button)findViewById(R.id.Button03); transfBut = (Button)findViewById(R.id.Button04); complexBut = (Button)findViewById(R.id.Button05); alphaBut.setOnClickListener(this); scaleBut.setOnClickListener(this); rotateBut.setOnClickListener(this); transfBut.setOnClickListener(this); complexBut.setOnClickListener(this); iv1 = (ImageView)findViewById(R.id.iv1); iv2 = (ImageView)findViewById(R.id.iv2); iv3 = (ImageView)findViewById(R.id.iv3); iv4 = (ImageView)findViewById(R.id.iv4); iv5 = (ImageView)findViewById(R.id.iv5); } @Override public void onClick(View v) { Button b = (Button)v; switch(b.getId()){ case R.id.Button01://alpha alphaAnimation(); break; case R.id.Button02://scale scaleAnimation(); break; case R.id.Button03://rotate rotateAnimation(); break; case R.id.Button04 ://transf transfAnimation(); break; case R.id.Button05 ://complex complexAnimation(); break; } } /** * 综合例子 */ private void complexAnimation() { as = new AnimationSet(true);//1.实例化AnimationSet TranslateAnimation ta = new TranslateAnimation(Animation.RELATIVE_TO_PARENT, 0, Animation.RELATIVE_TO_PARENT, 0.5f, Animation.RELATIVE_TO_PARENT, 0, Animation.RELATIVE_TO_PARENT, 0); ta.setDuration(5000);//设置动画的时间 AlphaAnimation aa = new AlphaAnimation(1, 0.3f);//2.创建需要的animation aa.setDuration(3000); as.addAnimation(ta);//3.将animation加入AnimationSet as.addAnimation(aa);//3.将animation加入AnimationSet as.setFillAfter(true);//最终停止 complexBut.startAnimation(as);//4.开始动画 iv5.startAnimation(as);//开始动画 } /** * 平移 */ private void transfAnimation() { as = new AnimationSet(true);//1.实例化AnimationSet TranslateAnimation aa = new TranslateAnimation(Animation.RELATIVE_TO_PARENT, 0, Animation.RELATIVE_TO_PARENT, 1, Animation.RELATIVE_TO_PARENT, 0, Animation.RELATIVE_TO_PARENT, 1); aa.setDuration(5000);//设置动画的时间 as.addAnimation(aa);//3.将animation加入AnimationSet transfBut.startAnimation(as);//4.开始动画 iv4.startAnimation(as);//开始动画 } /** * 旋转 */ private void rotateAnimation() { as = new AnimationSet(true);//1.实例化AnimationSet RotateAnimation aa = new RotateAnimation(0, 270, Animation.RELATIVE_TO_PARENT, 0.2f, Animation.RELATIVE_TO_PARENT, 0.2f); aa.setDuration(5000);//设置动画的时间 as.addAnimation(aa);//3.将animation加入AnimationSet rotateBut.startAnimation(as);//4.开始动画 iv3.startAnimation(as);//开始动画 } /** * 变化大小 */ private void scaleAnimation() { as = new AnimationSet(true);//1.实例化AnimationSet // ScaleAnimation aa = new ScaleAnimation(1, 2, 1, 2);//2.创建需要的animation,这种构造方法是以自身为pivot ScaleAnimation aa = new ScaleAnimation(0, 1, 0, 1, Animation.RELATIVE_TO_PARENT, 0.5f, Animation.RELATIVE_TO_PARENT, 0.5f); aa.setDuration(7000);//设置动画的时间 as.addAnimation(aa);//3.将animation加入AnimationSet scaleBut.startAnimation(as);//4.开始动画 iv2.startAnimation(as);//开始动画 } /** * 透明度渐变 */ private void alphaAnimation(){ as = new AnimationSet(true);//1.实例化AnimationSet AlphaAnimation aa = new AlphaAnimation(1, 0);//2.创建需要的animation aa.setDuration(2000);//设置动画的时间 as.addAnimation(aa);//3.将animation加入AnimationSet alphaBut.startAnimation(as);//4.开始动画 iv1.startAnimation(as);//开始动画 } }
评论
TranslateAnimation(0, 200, 0, 0),下次在希望这个View从这个地方开始动画,怎么做?求指导。
图片平移动画时,比如从(0,0)点开始到(480,0)点结束【x轴,y轴】,现在想实现能够从另外一边出来(即感觉是一张图片的效果)???
<translate android:fromXDelta="0" android:toXDelta="480"
android:fromYDelta="0" android:toYDelta="0" android:duration="5000" />
发表评论
-
eclipse 快捷键 for macbook (自用备份)
2011-11-06 19:31 1764产看方法被谁调用: cmd + shift + g -
android去除状态栏和下面视图之前的黑线
2011-08-30 11:13 3532<style name=" ... -
sqlite3 常用命令 for android
2011-08-16 10:59 13961)创建数据库文件: ... -
解决Window系统adb shell后中文显示乱码
2011-08-16 10:52 6117Android中使用的是UTF-8字符,而CMD默认字符集 ... -
(转)Eclipse xml formatter setting for android
2011-08-16 10:03 1731Android里使用很多xml 定义layout,我们 ... -
Android TabActivity实现多页显示效果
2011-03-05 01:28 29517TabActivity实现多页显示 ... -
ListView进阶系列之一 内容顺序淡淡显示
2011-03-04 10:06 5945ListView进阶系列之一 内容顺序淡淡显示 listVi ... -
android布局文件中的include
2011-02-27 00:46 8994居然没有发现,在xml文件中可以使用include,我晕 一 ... -
【收集】Android 面试题
2011-02-25 23:42 9866这个是我自己整理的一些面试题,都是在网上找的,非原创。面试前可 ... -
handler异步控制Runnable
2011-02-20 11:03 91941 关于改变Activity中TextView的方法 ... -
Android消息机制入门一
2011-02-19 19:54 2105Android消息机制入门 ... -
自定义控件(SurfaceView与view结合)
2011-02-14 15:59 16174自定义控件(SurfaceView与view结合) 作 ... -
SurfaceView简单例子
2011-02-13 23:53 8363SurfaceView简单例子 作者:Legend ... -
SurfaceView概述
2011-02-13 21:20 16392SurfaceView概述 作者 ... -
Surface概述
2011-02-13 16:18 3277Surface概述 作者:L ... -
Activity之间的相互调用与传递参数
2011-01-05 19:08 11995Activity之间的相互调用与传递参数 作 ... -
SharedPreferenced
2010-12-25 21:49 1991SharedPreferenced ... -
Android中进行单元测试
2010-12-23 13:35 1643Android中进行单元测试 作者:LEGEND ... -
Android 与 MVC
2010-12-23 12:30 3764Android & MVC 作者:LEGEND ... -
android中文件IO
2010-12-23 01:31 3253Android中文件的读写 ...
相关推荐
在Android开发中,Tweened Animation也被广泛应用,特别是在创建动态UI效果时。 本示例程序旨在展示如何在Android应用程序中实现四种基本的Tweened动画:淡入淡出、缩放、移动和旋转。这些效果可以独立使用,也可以...
Android 中 Tweened animation的实例详解 Tweened animation有四种类型,下面主要介绍Scale类型。 运行效果如下: Android SDK提供了2种方法:直接从XML资源中读取Animation,使用Animation子类的构造函数来初始化...
本文实例讲述了Android编程之Animation动画用法。分享给大家供大家参考,具体如下: Animations 一、Animations介绍 Animations是一个实现android UI界面动画效果的API,Animations提供了一系列的动画效果,可以进行...
Android 动画主要分为两类:Tweened Animation(渐变动画)和Frame-by-Frame Animation(逐帧动画)。这两种动画方式各有特点,可以根据不同的需求选择使用。 Tweened Animation 包括四种基本类型:AlphaAnimation...
以上是对Android中几种基本Tweened Animations的详细解释及其代码实现方式。这些动画能够极大地增强应用的视觉效果,提高用户体验。开发者可以根据具体需求调整动画参数,实现更加丰富的动画效果。
在Android平台上,动画效果是构建用户界面和提升用户体验的关键元素之一。Android提供了多种动画机制,主要分为两类:Tweened Animation(渐变动画)和Frame-by-Frame Animation(逐帧动画)。接下来,我们将深入...
在Android开发中,动画是提升用户体验的关键因素之一。"ViewAnimationDemo"是一个示例项目,专注于Tweened Animations的学习,这是Android中基本的视图动画类型。Tweened Animations允许开发者对视图对象进行平移、...
Animation从总体来说可以分为两类: Tweened Animations:该类提供了旋转,移动,...Frame-By-Frame Animations:该类可以创建一个Drawable序列,这些Drawable可以按照指定的事件间隔一个一个显示,和动画片差不多。
Tweened Animations是Android动画中非常重要的一部分,通过淡入淡出、缩放、旋转和移动四种基本效果,开发者可以创造出丰富多彩的动画体验。掌握这些动画的实现方法和参数设置,能够显著提升应用的视觉吸引力和用户...
根据不同的应用场景和技术实现,Android动画大致可以分为以下几类:Tweened Animations(补间动画)、Frame-by-frame Animations(逐帧动画)、Property Animations(属性动画)以及Animator(动画器)系统。...
- Tweened Animation(渐变动画):这种动画主要用于连续的平滑变化,如透明度、尺寸或位置的变化,可以使用XML或Java代码实现。 - Frame by Frame(逐帧动画):通常用于更复杂的动画,比如动画序列图,通过在XML...
"Android 动画效果translate、scale、alpha、rotate详解" Android 动画效果可以分为四种类型:translate、scale、alpha...Android 动画效果可以通过 XML 文件或 Java 代码来定义,两种方式都可以实现丰富的动画效果。
这里我们通过代码实现一些滑动翻页的动画效果。 Animation实现动画有两个方式:帧动画(frame-by-frame animation)和补间动画(tweened animation) 本示例通过继承Animation自定义Rotate3D,实现3D翻页效果。效果...
在Android中,动画主要分为两大类:**逐帧动画(Frame-by-Frame Animation)**与**渐变动画(Tweened Animation)**。 - **逐帧动画**类似于传统的GIF动画,它通过连续播放一系列图像来模拟动态效果。 - **渐变动画...
在Android开发中,补间动画(Tween Animation)是一种常见的视觉效果技术,用于让视图对象在一定时间内平滑地从一种状态过渡到另一种状态。补间动画的核心是改变对象的属性,如位置、大小、透明度等,通过一系列连续...
Animation 实现补间动画效果 Tweened Animations:该类Animations提供了旋转、移动、伸展和淡出等效果。 Alpha——淡入淡出,Scale——缩放效果,Rotate——旋转,Translate——移动效果。