android_animation效果
(安卓开发技术课件)35动画讲解
// 设置动画的时间 mAnimationTranslate.setDuration(1000);
// 开始播放动画 image.startAnimation(mAnimationTranslate);
2. 使用AnimationUtils类的loadAnimation方法来获取Animation动 画对象,通过startAnimation方法开始播放动画。 Animation a=AnimationUtils.loadAnimation(this,R.anim.t) image.startAnimation(a);
平移效果动画
动画讲解
2. 在res/anim目录下新建一个xml文档 (t.xml)
<?xml version="1.0" encoding="utf-8"?> <translate
xmlns:android="/apk/res/android" android:fromXDelta="-100" android:toXDelta="360" android:fromYDelta="0" android:toYDelta="0" android:duration="3000"/>
Android动画之LayoutTransition布局动画
Android动画之LayoutTransition布局动画1 LayoutTransition 概述通过对视图动画和属性动画的学习,我们现在可以对一个view进行动画操作,但是如何在添加view,删除view,显示view,隐藏view时给相应view和受影响的其他view添加动画,不太容易做。
如果不添加动画,单纯的使用setVisible会显得很突兀。
如果只是对受到影响的view添加动画,可以通过设置view的高度使之显示和隐藏,还可以利用ScrollView通过滚动隐藏和显示动画,但其他受影响的view则比较难处理,布局动画LayoutTransition 就可以很好地完成这个功能。
来自Developer 网站关于LayoutTransition概述:LayoutTransition字面翻译是布局的过渡也就是布局动画,这个类可以实现ViewGroup的布局改变时自动执行动画,LayoutTransition 从api11开始提供。
给ViewGroup设置动画很简单,只需要生成一个LayoutTransition实例,然后调用ViewGroup的setLayoutTransition(LayoutTransition)函数就可以了。
当设置了布局动画的ViewGroup添加或者删除内部view时就会触发动画。
如果要设置定制的动画,需要调用setAnimator(方法。
布局动画由两种状态的改变导致执行四种不同的动画,两种状态的改变分别是view被添加到ViewGroup(或者变得可见VISIBILITY),view被移除ViewGroup(或者不可见),所以设置View可见或者不可见也将触发布局动画添加和删除动画的逻辑( GONE and VISIBLE)。
四种不同的动画分别是(api11中添加):•APPEARING:view被添加(可见)到ViewGroup会触发的动画。
•DISAPPEARING :view被移除(不可见)ViewGroup会触发的动画。
android图片3d旋转
看到很多人在问如何实现三维的翻转效果,所以今天在这里简单的给大家分析一下,其实在APIDemo中就有这样一个例子,那么我们就以其为例来学习Android中的翻转动画效果的实现,首先看一下运行效果如下图所示。
Android中并没有提供直接做3D翻转的动画,所以关于3D翻转的动画效果需要我们自己实现,那么我们首先来分析一下Animation 和Transformation。
Animation动画的主要接口,其中主要定义了动画的一些属性比如开始时间,持续时间,是否重复播放等等。
而Transformation中则包含一个矩阵和alpha值,矩阵是用来做平移,旋转和缩放动画的,而alpha值是用来做alpha动画的,要实现3D旋转动画我们需要继承自Animation类来实现,我们需要重载getTransformation和applyTransformation,在getTransformation中Animation会根据动画的属性来产生一系列的差值点,然后将这些差值点传给applyTransformation,这个函数将根据这些点来生成不同的Transformation。
下面是具体实现:1.public class Rotate3dAnimation extends Animation {2.//开始角度3. private final float mFromDegrees;4.//结束角度5. private final float mToDegrees;6.//中心点7. private final float mCenterX;8. private final float mCenterY;9. private final float mDepthZ;10.//是否需要扭曲11. private final boolean mReverse;12.//摄像头13. private Camera mCamera;14. public Rotate3dAnimation(float fromDegrees, float toDegrees,15. float centerX, float centerY, float depthZ, boolean reverse) {16. mFromDegrees = fromDegrees;17. mToDegrees = toDegrees;18. mCenterX = centerX;19. mCenterY = centerY;20. mDepthZ = depthZ;21. mReverse = reverse;22. }23.24. @Override25. public void initialize(int width, int height, int parentWidth, int parentHeight) {26. super.initialize(width, height, parentWidth, parentHeight);27. mCamera = new Camera();28. }29.//生成Transformation30. @Override31. protected void applyTransformation(float interpolatedTime, Transformation t) {32. final float fromDegrees = mFromDegrees;33.//生成中间角度34. float degrees = fromDegrees + ((mToDegrees - fromDegrees) * interpolatedTime);35.36. final float centerX = mCenterX;37. final float centerY = mCenterY;38. final Camera camera = mCamera;39.40. final Matrix matrix = t.getMatrix();41.42. camera.save();43. if (mReverse) {44. camera.translate(0.0f, 0.0f, mDepthZ * interpolatedTime);45. } else {46. camera.translate(0.0f, 0.0f, mDepthZ * (1.0f - interpolatedTime));47. }48. camera.rotateY(degrees);49.//取得变换后的矩阵50. camera.getMatrix(matrix);51. camera.restore();52.53. matrix.preTranslate(-centerX, -centerY);54. matrix.postTranslate(centerX, centerY);55. }56.}其中包括了旋转的开始和结束角度,中心点、是否扭曲、和一个Camera,这里我们主要分析applyTransformation函数,其中第一个参数就是通过getTransformation函数传递的差指点,然后我们根据这个差值通过线性差值算法计算出一个中间角度degrees,Camera 类是用来实现绕Y轴旋转后透视投影的,因此我们首先通过t.getMatrix()取得当前的矩阵,然后通过camera.translate来对矩阵进行平移变换操作,camera.rotateY进行旋转。
AndroidAnimation之TranslateAnimation(平移动画)
AndroidAnimation之TranslateAnimation(平移动画)TranslateAnimation(平移动画)的意思⽆⾮就是⼀张图⽚或其他从⼀个位置到达另外⼀个位置。
直接代码分析,相关重要属性参数解释都在代码中。
1、⾸先编写main.xml⽂件。
<RelativeLayout xmlns:android="/apk/res/android"xmlns:tools="/tools" android:layout_width="match_parent"android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"android:paddingRight="@dimen/activity_horizontal_margin"android:paddingTop="@dimen/activity_vertical_margin"android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity"><ImageViewandroid:id="@+id/image"android:text="@string/hello_world"android:layout_width="wrap_content"android:layout_height="wrap_content"android:src="@drawable/car_one1"/></RelativeLayout>2、接下来编写MainActivity.java⽂件。
flinganimation 的使用
flinganimation 的使用FlingAnimation是Android中的一个动画类,用于实现惯性滑动效果。
它可以用于各种视图的滑动操作,例如RecyclerView、ListView等。
使用FlingAnimation可以使滑动更加平滑流畅,提升用户体验。
我们需要在代码中引入FlingAnimation类。
在Android中,可以通过以下方式导入FlingAnimation类:```import androidx.dynamicanimation.animation.FlingAnimation; ```接下来,我们可以创建一个FlingAnimation对象,并设置相应的参数。
FlingAnimation的构造函数需要传入两个参数:一个是目标视图对象,另一个是动画的属性。
例如,我们可以创建一个FlingAnimation对象来实现RecyclerView的滑动操作:```FlingAnimation flingAnimation = new FlingAnimation(recyclerView, FlingAnimation.SCROLL_X);```在设置参数之后,我们可以调用FlingAnimation的一些方法来配置动画的属性。
例如,可以使用setStartVelocity方法设置动画的起始速度:```flingAnimation.setStartVelocity(1000f);```除了设置起始速度,还可以使用setFriction方法设置动画的摩擦力。
摩擦力越大,滑动的距离就越短。
例如,可以使用以下代码设置摩擦力为2:```flingAnimation.setFriction(2f);```在设置好参数之后,我们可以调用start方法来启动动画:```flingAnimation.start();```此时,FlingAnimation就会自动根据设置的参数进行滑动操作。
android 带箭头提示框,三种带箭头提示框总结实例
android 带箭头提示框,三种带箭头提示框总结实例Android带箭头提示框,也被称为气泡提示框,是一种常见的用户界面元素,常用于引导用户操作、显示提示信息等场景。
在本文中,我们将总结三种常见的带箭头提示框,并提供相应的实例,帮助读者快速上手制作自己的提示框。
一、简单带箭头提示框简单带箭头提示框是最基本的一种形式,它由一个矩形框和一个带箭头的尖角组成。
在Android中,我们可以利用PopupWindow类来创建这种提示框。
下面是一个简单的示例代码:kotlinval popupView = layoutInflater.inflate(yout.popup_layout, null) val popupWindow = PopupWindow(popupView, youtParams.WRAP_CONTENT,youtParams.WRAP_CONTENT)设置背景popupWindow.setBackgroundDrawable(ColorDrawable(Color.TRA NSPARENT))设置箭头的位置和大小popupWindow.showAsDropDown(anchorView)其中,`popup_layout`是一个自定义的布局文件,用于定义提示框的样式和内容。
通过调用`PopupWindow`的构造方法,我们可以传入布局文件的引用来创建一个带有指定宽度和高度的提示框。
在示例代码中,我们还设置了提示框的背景为透明,通过`ColorDrawable`类来实现。
这样可以让提示框的样式更加灵活,适应不同的背景色。
同时,我们通过`showAsDropDown()`方法设置了箭头的位置,使得提示框能够正确地显示在指定的锚点View下方。
二、可自定义样式的带箭头提示框除了简单的带箭头提示框外,我们还可以根据需求自定义提示框的样式。
在Android中,可以通过自定义Drawable来实现。
android 动画transformation 简书
android 动画transformation 简书标题:Android动画Transformation简述引言:Android动画Transformation是一种在应用程序中实现动画效果的技术。
通过对视图的变换和交互,可以为用户提供更加生动和吸引人的用户界面体验。
本文将从五个方面分析Android动画Transformation的相关内容,包括动画类型、属性动画、视图动画、插值器和动画监听器。
正文:1. 动画类型1.1 属性动画属性动画是一种在Android中常用的动画类型,它允许开发者对视图的属性进行动态的变化。
属性动画可以对任何属性进行操作,如位置、大小、透明度等。
通过设置动画的起始值和结束值,以及动画的持续时间和插值器,可以实现各种复杂的动画效果。
1.2 视图动画视图动画是一种基于补间动画的技术,它通过对视图的整体进行变换来实现动画效果。
视图动画可以对视图进行平移、缩放、旋转和透明度等变换操作。
但是,视图动画只能对视图的外观进行变换,而不能改变视图的实际位置和大小。
2. 属性动画2.1 值动画值动画是属性动画的一种类型,它可以对任何属性进行动画操作。
通过设置动画的起始值和结束值,以及动画的持续时间和插值器,可以实现属性的平滑过渡效果。
值动画可以应用于单个属性,也可以应用于多个属性的组合。
2.2 对象动画对象动画是属性动画的另一种类型,它可以对整个对象进行动画操作。
通过设置对象的属性值,可以实现对象的平滑过渡效果。
对象动画可以应用于任何对象,包括自定义的Java对象。
3. 视图动画3.1 平移动画平移动画可以将视图沿着X轴或Y轴进行平移。
通过设置动画的起始位置和结束位置,以及动画的持续时间和插值器,可以实现平滑的平移效果。
3.2 缩放动画缩放动画可以将视图的大小进行缩放。
通过设置动画的起始大小和结束大小,以及动画的持续时间和插值器,可以实现平滑的缩放效果。
3.3 旋转动画旋转动画可以将视图进行旋转。
Android属性动画框架ObjectAnimator、ValueAnimator,这一篇就够了
Android属性动画框架ObjectAnimator、ValueAnimator,这⼀篇就够了前⾔我们都知道 Android ⾃带了 Roate Scale Translate Alpha 多种框架动画,我们可以通过她们实现丰富的动画效果,但是这些宽家动画却有⼀个致命的弱点,它们只是改变了 View 显⽰的⼤⼩,⽽没有改变 View 的响应区域。
这时以 ObjectAnimator、ValueAnimator 为代表的属性动画也就应运⽽⽣了。
简单效果⼯作原理属性动画字如其名,是通过改变 View 的属性值来改变控件的形态,说⽩了就是通过反射技术来获取控件的⼀些属性如宽度、⾼度等的 get 和 set ⽅法,从⽽实现所谓的动画效果。
所以,这就需要我们的 View (如⾃定义 View 中)具有 set 和 get ⽅法,如果没有则会导致程序的Clash 。
具体步骤1. ⾸先,系统通过 get ⽅法获得属性值2. 系统在时间插值器的作⽤下,更变属性值3. 系统调⽤ set ⽅法,将属性值重新赋予控件由此也可以看出:属性动画直接改变了控件的属性,所以动画结束后控件也就发⽣了永久性的变化。
使⽤ ObjectAnimator 实现四种动画这⾥我打算通过使⽤ ObjectAnimator 实现四⼤动画框架:1. alpha2. scaleX/scaleY3. translateX/translateY4. rotation给⼤家讲解下 ObjectAnimator 使⽤private void iniAnimation(){// 透明度动画ObjectAnimator.ofFloat(mAlphaImage, "alpha", 1, 0, 1).setDuration(4000).start();// 缩放final AnimatorSet animatorSet = new AnimatorSet();mScaleImage.setPivotX(mScaleImage.getWidth()+250);mScaleImage.setPivotY(mScaleImage.getHeight()+250);animatorSet.playTogether(ObjectAnimator.ofFloat(mScaleImage, "scaleX", 1, 0).setDuration(2000),ObjectAnimator.ofFloat(mScaleImage, "scaleY", 1, 0).setDuration(2000));animatorSet.start();// 平移 translationfinal AnimatorSet translationAnimatorSet = new AnimatorSet();translationAnimatorSet.playTogether(ObjectAnimator.ofFloat(mTranslationImage, "translationX", 20, 100).setDuration(2000),ObjectAnimator.ofFloat(mTranslationImage, "translationY", 20,100).setDuration(2000));translationAnimatorSet.start();// 利⽤ ObjectAnimator 实现旋转动画final AnimatorSet rotateAnimationSet = new AnimatorSet();rotateAnimationSet.playTogether(ObjectAnimator.ofFloat(mRotationImage, "rotation",0, 360).setDuration(2000));rotateAnimationSet.start();}以上代码就通过了 ObjectAnimator 实现了,四⼤效果,实现过程基本可以归纳为1. 创建 AnimatorSet 对象2. 设置,变化发⽣的轴⼼(部分需要)3. 设置所需要发⽣改变的动画(通常在 playTogether() ⽅法中)4. 开启动画最后的运⾏效果如开头动画所⽰同样的,我们可以在⼀个 playTogether ⽅法中添加多个动画,这样就能实现多动画组合的效果。
使用Lottie库在Android中实现动画
使用Lottie库在Android中实现动画在Android应用程序开发中,动画是提升用户体验和吸引用户的重要元素之一。
为了实现流畅且高品质的动画效果,开发者常常需要借助第三方库。
其中,Lottie库是一种颇受欢迎的选择,它允许开发者使用Adobe After Effects创建的动画并在Android应用中实现。
本文将介绍如何在Android中使用Lottie库实现动画效果。
一、概述Lottie是由Airbnb开发的开源动画库,它允许开发者将Adobe After Effects创建的动画导出为JSON格式,并在Android、iOS和Web等平台上进行渲染和播放。
其主要特点包括:1. 支持复杂的矢量动画,包括形状、路径、渐变、遮罩等效果;2. 动画文件体积小,加载速度快;3. 支持动画的播放、暂停、重复播放等交互操作;4. 提供可视化编辑器,方便开发者对动画进行预览和调整。
二、准备工作在开始之前,我们需要进行一些准备工作:1. 下载Lottie库:从Lottie的GitHub仓库中下载最新版本的Lottie 库,并将其导入到Android项目中。
2. 导入JSON动画文件:使用Adobe After Effects创建动画,并导出为JSON格式文件。
将该文件添加到Android项目的assets目录中。
三、集成Lottie库接下来,我们将介绍如何在Android项目中集成Lottie库,并实现动画效果。
1. 在build.gradle文件中添加Lottie库的依赖:```groovyimplementation 'com.airbnb.android:lottie:3.7.2'```2. 在布局文件中添加LottieView组件:```xml<com.airbnb.lottie.LottieAnimationViewandroid:id="@+id/animation_view"android:layout_width="match_parent"android:layout_height="match_parent"app:lottie_rawRes="@raw/animation_file" />```其中,`lottie_rawRes`属性指定了动画文件的资源ID。
五种Animation的实例代码
五种Animation的实例代码五种Animation的实例代码1、FrameAnimation,帧动画,就是不断的图片更替,实现动画的效果。
Java代码1packagecom.example.animation;2345importandroid.app.Activity;67importandroid.graphics.drawable.AnimationDrawable;89importandroid.os.Bundle;1011importandroid.view.View;1213importandroid.view.View.OnClickListener;1415importandroid.widget.Button;1617importandroid.widget.ImageV iew;1819importandroid.widget.TextView;20212223publicclassFrameAnimationActivityextendsActivity{2425Buttonm_btnStart;2627ImageViewm_imgAnimation;2829TextViewm_lblText;3031@Override3233protectedvoidonCreate(BundlesavedInstanceState){3435//TODOAuto-generatedmethodstub3637super.onCreate(savedInstanceState);3839setContentView(yout.frameanimaitonlayout);40414243m_btnStart=(Button)findView ById(com.example.R.id.frameanimation_btnStart);4445m_imgAnimation=(ImageView)findView ById(com.example.R.id.frameanimaiton_image View1);4647m_imgAnimation.setBackgroundResource(com.example.R.drawable.frame_animation); 4849m_btnStart.setOnClickListener(newOnClickListener(){50515253@Override5455publicvoidonClick(Viewv){5657//TODOAuto-generatedmethodstub5859AnimationDrawableframeAnimation=(AnimationDrawable)m_imgAnimation.getBackgr ound();60616263if(frameAnimation.isRunning()){6465frameAnimation.stop();6667}else{6869frameAnimation.stop();70717273frameAnimation.start();7475}7677}7879});80818283m_lblText=(TextView)findViewById(com.example.R.id.frameanimation_lblText);8485m_lblText.setTextColor(getResources().getColor(com.example.R.color.frameanimation_l blTextColor));86878889}9091}922、ScaleAnimaiton,伸缩动画,通过变化图片的比例实现动画效果XML/HTML代码93<?xmlversion="1.0"encoding="utf-8"?>9495<scalexmlns:android="/apk/res/android"9697android:interpolator="@android:anim/decelerate_interpolator"9899android:fromXScale="1"100101android:toXScale="0.4"102103android:fromYScale="1"104105android:toYScale="0.6"106107android:duration="200"108109android:repeatCount="200">110111112113</scale>114Java代码115packagecom.example.animation;116117118119importandroid.app.Activity;120121importandroid.os.Bundle;122123importandroid.view.animation.Animation;124125importandroid.view.animation.AnimationUtils;126127importandroid.view.animation.ScaleAnimation;128129importandroid.widget.ImageV iew;130131132133publicclassScaleAnimationActivityextendsActivity{134135ImageViewm_img;136137@Override138139protectedvoidonCreate(BundlesavedInstanceState){140141//TODOAuto-generatedmethodstub142143super.onCreate(savedInstanceState);144145setContentView(_example_animation_scale);146147148149m_img=(ImageV iew)findView ById(com.example.R.id.scaleanimation_imageView1); 150151152153154155//Animationanim=newScaleAnimation(1f,0.4f,1f,0.3f);156157//anim.setDuration(2000);158159//anim.setRepeatCount(100);160161//m_img.setAnimation(anim);162163//anim.start();164165166167Animationanim=AnimationUtils.loadAnimation(getApplicationContext(),com.example.R .anim.scale);168169m_img.startAnimation(anim);170171}172173}1743、RotateAnimation,旋转动画,通过变化图片的角度实现动画效果Java代码175packagecom.example.animation;176177178179importandroid.app.Activity;180181importandroid.os.Bundle;182183importandroid.view.animation.Animation;184185importandroid.view.animation.RotateAnimation;186187importandroid.view.animation.ScaleAnimation;188189importandroid.widget.ImageV iew;190191192193publicclassRotateAnimationActivityextendsActivity{194195ImageViewm_image;196197198199@Override200201protectedvoidonCreate(BundlesavedInstanceState){202203//TODOAuto-generatedmethodstub204205super.onCreate(savedInstanceState);206207setContentView(_example_animation_rotate);208209m_image=(ImageView)findViewById(_example_animation_rotate _imageView1);210211212213//Animationanim=newScaleAnimation(1,4,1,3);214215Animationanim=newRotateAnimation(12,184);216217anim.setDuration(2000);218219anim.setRepeatCount(-1);220221m_image.setAnimation(anim);222223anim.start();224225}226227}2284、TranslateAnimation,移动动画,通过变化图片的位置,也就是变化坐标,实现动画效果Java代码229packagecom.example.animation;230231232233importandroid.app.Activity;234235importandroid.os.Bundle;236237importandroid.view.animation.AlphaAnimation;238239importandroid.view.animation.Animation;240241importandroid.view.animation.TranslateAnimation;242243importandroid.widget.ImageV iew;244245246247publicclassTranslateAnimationActivityextendsActivity{248249@Override250251protectedvoidonCreate(BundlesavedInstanceState){252253//TODOAuto-generatedmethodstub254255super.onCreate(savedInstanceState);256257setContentView(_example_animation_translate);258259260261ImageViewimg=(ImageView)findViewById(_example_animation _translate_imageView1);262263264265Animationanim=newTranslateAnimation(10,230,10,240);266267anim.setDuration(2000);268269anim.setRepeatCount(-1);270271img.setAnimation(anim);272273anim.startNow();274275}276277}2785、AlphaAnimation,透明度动画,通过变化图片的透明度,实现动画效果Java代码279packagecom.example.animation;280281282283importandroid.app.Activity;284285importandroid.graphics.Interpolator;286287importandroid.os.Bundle;288289importandroid.view.animation.AlphaAnimation;290291importandroid.view.animation.Animation;292293importandroid.widget.ImageV iew;294295296297publicclassAlphaAnimationActivityextendsActivity{298299@Override300301protectedvoidonCreate(BundlesavedInstanceState){302303//TODOAuto-generatedmethodstub304305super.onCreate(savedInstanceState);306307setContentView(_example_animation_alpha);308309310311ImageViewimg=(ImageView)findViewById(_example_animation _alpha_imageView1);312313314315Animationanim=newAlphaAnimation(1,0);316317anim.setDuration(2000);318319anim.setRepeatCount(-1);320321anim.setInterpolator(getApplicationContext(),android.R.anim.accelerate_interpolator); 322323img.setAnimation(anim);324325anim.startNow();326 327} 328 329} 330。
Android属性动画之无限循环缩放动画,旋转动画
Android属性动画之无限循环缩放动画,旋转动画Android属性动画之⽆限循环缩放动画,旋转动画缩放动画AnimatorSet animatorSetsuofang = new AnimatorSet();//组合动画ObjectAnimator scaleX = ObjectAnimator.ofFloat("执⽆动画的控件", "scaleX", 1, 1.1f,1);//后⽆个参数是放⽆的倍数ObjectAnimator scaleY = ObjectAnimator.ofFloat("执⽆动画的控件", "scaleY", 1, 1.1f,1);scaleX.setRepeatCount(ValueAnimator.INFINITE);//永久循环scaleY.setRepeatCount(ValueAnimator.INFINITE);animatorSetsuofang.setDuration(3000);//时间animatorSetsuofang.play(scaleX).with(scaleY);//两个动画同时开始animatorSetsuofang.start();//开始旋转动画ObjectAnimator objectAnimator = ObjectAnimator.ofFloat("执⽆动画的空件", "rotation", 0f, 360f);//旋转的⽆度可有多个objectAnimator.setDuration(1000);objectAnimator.setRepeatCount(ValueAnimator.INFINITE);objectAnimator.setRepeatMode(ObjectAnimator.RESTART);/ /匀速objectAnimator.start();//开始(重新开始)objectAnimator.pause();//暂停objectAnimator.resume();//继续(在暂停的位置继续动画)objectAnimator.end();//结束(回到原始位置)。
Android 动画框架详解
Android动画框架详解简介:Android平台提供了一套完整的动画框架,使得开发者可以用它来开发各种动画效果。
Android动画框架详解由原理篇和实例篇两部分组成。
本文是第一部分原理篇,主要分析Tween动画的实现原理,最后简单介绍在Android 中如何通过播放Gif文件来实现动画。
第二部分实例篇将在原理篇的基础上,向您展示一个动画实例的实现。
本文的标签:android标记本文!发布日期:2010年12月17日级别:中级访问情况14398次浏览建议:0(添加评论)平均分(共28个评分)Android平台提供了一套完整的动画框架,使得开发者可以用它来开发各种动画效果,本文将向读者阐述Android的动画框架是如何实现的。
任何一个框架都有其优势和局限性,只有明白了其实现原理,开发者才能知道哪些功能可以利用框架来实现,哪些功能须用其他途径实现。
Android平台提供了两类动画,一类是Tween动画,即通过对场景里的对象不断做图像变换(平移、缩放、旋转)产生动画效果;第二类是Frame动画,即顺序播放事先做好的图像,跟电影类似。
本文是由两部分组成的有关Android动画框架详解的第一部分原理篇,主要分析Tween动画的实现原理,最后简单介绍在Android中如何通过播放Gif文件来实现动画。
我们先看一下动画示例来一点感性认识。
Android动画使用示例使用动画示例程序的效果是点击按钮,TextView旋转一周。
读者也可以参看Apidemos中包com.example.android.apis.animationview下面的Transition3d和com.example.android.apis.view下面的Animation1/Animation2/Animation3示例代码。
清单1.代码直接使用动画package com.ray.animation;import android.app.Activity;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.view.animation.AccelerateDecelerateInterpolator;import android.view.animation.Animation;import android.view.animation.RotateAnimation;import android.widget.Button;public class TestAnimation extends Activity implements OnClickListener{public void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(yout.main);Button btn=(Button)findViewById(R.id.Button);btn.setOnClickListener(this);}public void onClick(View v){Animation anim=null;anim=new?RotateAnimation(0.0f,+360.0f);anim.setInterpolator(new AccelerateDecelerateInterpolator());anim.setDuration(3000);findViewById(R.id.TextView01).startAnimation(anim);}}使用XML文件方式,在打开Eclipse中新建的Android工程的res目录中新建anim文件夹,然后在anim目录中新建一个myanim.xml(注意文件名小写),内容如下:图1.使用xml文件方式其中的java代码如下:package com.ray.animation;import android.app.Activity;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.view.animation.Animation;import android.view.animation.AnimationUtils;import android.widget.Button;import android.widget.TextView;public class TestAnimation extends Activity implements OnClickListener{ public void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(yout.main);Button btn=(Button)findViewById(R.id.Button01);btn.setOnClickListener(this);}@Overridepublic void onClick(View v){Animation anim=AnimationUtils.loadAnimation(this,R.anim.my_rotate_action);findViewById(R.id.TextView01).startAnimation(anim);}}回页首Android动画框架原理现有的Android动画框架是建立在View的级别上的,在View类中有一个接口startAnimation来使动画开始,startAnimation函数会将一个Animation类别的参数传给View,这个Animation是用来指定我们使用的是哪种动画,现有的动画有平移,缩放,旋转以及alpha变换等。
Android中的动画研究
Android中的动画研究本文主要研究Android中的三种动画,第一种是单个View的各种动画效果,第二种是两个Active切换时的动画效果,第三种是类似于Gif的Frame By Frame动画效果,其中View的各种动画包括在xml文件中定义和代码中定义两种方式。
一、动画基本类型:如下表所示,Android的动画由四种类型组成,即可在xml中定义,也可在代码中定义,如二、如何在XML文件中定义动画1.alpha<?xml version="1.0" encoding="utf-8"?><set xmlns:android="/apk/res/android" ><!-- 表示透明度从0.1到1.0,时长为3000ms。
--><alphaandroid:fromAlpha="0.1"android:toAlpha="1.0"android:duration="3000"/></set>2.Scale<?xml version="1.0" encoding="utf-8"?><set xmlns:android="/apk/res/android"><scaleandroid:interpolator="@android:anim/accelerate_decelerate_interpolator"android:fromXScale="0.0"android:toXScale="1.4"android:fromYScale="0.0"android:toYScale="1.4"android:pivotX="50%"android:pivotY="50%"android:fillAfter="false"android:duration="700" /></set><!-- 尺寸伸缩动画效果scale属性:interpolator 指定一个动画的插入器,共三种: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 ,该动画转化在动画结束后被应用-->3.Translate<?xml version="1.0" encoding="utf-8"?><set xmlns:android="/apk/res/android"><translateandroid:fromXDelta="30"android:toXDelta="-80"android:fromYDelta="30"android:toYDelta="300"android:duration="2000"/><!-- translate 位置转移动画效果整型值:fromXDelta 属性为动画起始时X坐标上的位置toXDelta 属性为动画结束时X坐标上的位置fromYDelta 属性为动画起始时Y坐标上的位置toYDelta 属性为动画结束时Y坐标上的位置注意:没有指定fromXType toXType fromYType toYType 时候,默认是以自己为相对参照物长整型值:duration 属性为动画持续时间说明: 时间以毫秒为单位--></set>4.Rotate<?xml version="1.0" encoding="utf-8"?><set xmlns:android="/apk/res/android"><rotateandroid:interpolator="@android:anim/accelerate_decelerate_interpolator"android:fromDegrees="0"android:toDegrees="+350"android:pivotX="50%"android:pivotY="50%"android:duration="3000" /><!-- rotate 旋转动画效果属性:interpolator 指定一个动画的插入器,共三种: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>三、如何使用XML中的动画效果public static Animation loadAnimation (Context context, int id)//第一个参数Context为程序的上下文//第二个参数id为动画XML文件的引用//例子:myAnimation= AnimationUtils.loadAnimation(this,R.anim.my_action);//使用AnimationUtils类的静态方法loadAnimation()来加载XML中的动画XML文件四、如何在Java代码中定义动画1.代码://在代码中定义动画实例对象private Animation myAnimation_Alpha;private Animation myAnimation_Scale;private Animation myAnimation_Translate;private Animation myAnimation_Rotate;//根据各自的构造方法来初始化一个实例对象myAnimation_Alpha=new AlphaAnimation(0.1f, 1.0f);myAnimation_Scale =new ScaleAnimation(0.0f, 1.4f, 0.0f, 1.4f,Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f); myAnimation_Translate=new TranslateAnimation(30.0f, -80.0f, 30.0f, 300.0f);myAnimation_Rotate=new RotateAnimation(0.0f, +350.0f,Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0.5f);2.分析1.1 AlphaAnimation第一步:AlphaAnimation类对象定义private AlphaAnimation myAnimation_Alpha;第二步:AlphaAnimation类对象构造AlphaAnimation(float fromAlpha, float toAlpha)//第一个参数fromAlpha为动画开始时候透明度//第二个参数toAlpha为动画结束时候透明度myAnimation_Alpha=new AlphaAnimation(0.1f, 1.0f);//说明:// 0.0表示完全透明// 1.0表示完全不透明第三步:设置动画持续时间myAnimation_Alpha.setDuration(5000);//设置时间持续时间为5000毫秒1.2 ScaleAnimation第一步:ScaleAnimation类对象定义private AlphaAnimation myAnimation_Scale;第二步:ScaleAnimation类对象构造ScaleAnimation(float fromX, float toX, float fromY, float toY,int pivotXType, float pivotXValue, int pivotYType, float pivotYValue)//第一个参数fromX为动画起始时X坐标上的伸缩尺寸//第二个参数toX为动画结束时X坐标上的伸缩尺寸//第三个参数fromY为动画起始时Y坐标上的伸缩尺寸//第四个参数toY为动画结束时Y坐标上的伸缩尺寸/*说明:以上四种属性值0.0表示收缩到没有1.0表示正常无伸缩值小于1.0表示收缩值大于1.0表示放大*///第五个参数pivotXType为动画在X轴相对于物件位置类型//第六个参数pivotXV alue为动画相对于物件的X坐标的开始位置//第七个参数pivotXType为动画在Y轴相对于物件位置类型//第八个参数pivotYV alue为动画相对于物件的Y坐标的开始位置myAnimation_Scale =new ScaleAnimation(0.0f, 1.4f, 0.0f, 1.4f,Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f); 第三步:设置动画持续时间myAnimation_Scale.setDuration(700);//设置时间持续时间为700毫秒1.3 TranslateAnimation第一步:TranslateAnimation类对象定义private AlphaAnimation myAnimation_Translate;第二步:TranslateAnimation类对象构造TranslateAnimation(float fromXDelta, float toXDelta,float fromYDelta, float toYDelta)//第一个参数fromXDelta为动画起始时X坐标上的移动位置//第二个参数toXDelta为动画结束时X坐标上的移动位置//第三个参数fromYDelta为动画起始时Y坐标上的移动位置//第四个参数toYDelta为动画结束时Y坐标上的移动位置第三步:设置动画持续时间mmyAnimation_Translate.setDuration(2000);1.4 RotateAnimation第一步:RotateAnimation类对象定义private AlphaAnimation myAnimation_Rotate;第二步:RotateAnimation类对象构造RotateAnimation(float fromDegrees, float toDegrees,int pivotXType, float pivotXValue, int pivotYType, float pivotYValue)//第一个参数fromDegrees为动画起始时的旋转角度//第二个参数toDegrees为动画旋转到的角度//第三个参数pivotXType为动画在X轴相对于物件位置类型//第四个参数pivotXV alue为动画相对于物件的X坐标的开始位置//第五个参数pivotXType为动画在Y轴相对于物件位置类型//第六个参数pivotYV alue为动画相对于物件的Y坐标的开始位置myAnimation_Rotate=new RotateAnimation(0.0f, +350.0f,Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF, 0.5f);第三步:设置动画持续时间myAnimation_Rotate.setDuration(3000);五、如何使用Java代码中的动画效果使用从View父类继承过来的方法startAnimation()来为View或是子类View等等添加一个动画效果public void startAnimation (Animation animation)六、转场动画在StartActivity后即调用overridePendingTransition(int enterAnim, int exitAnim)//in<?xml version="1.0" encoding="utf-8"?><set xmlns:android="/apk/res/android"><translateandroid:fromXDelta="100%p"android:toXDelta="0"android:duration="500"/></set>//out<?xml version="1.0" encoding="utf-8"?><set xmlns:android="/apk/res/android"><translateandroid:fromXDelta="0"android:toXDelta="-100%p"android:duration="500"/></set>七、Frame By FrameFrame by frame 指将一幅幅图片按序播放,效果像gif动画:第一步:将用到的图片资源加到工程。
android 动画的实现原理
android 动画的实现原理Android动画的实现原理是通过改变视图的属性值来创建视觉效果。
在Android中,动画可以通过三种方式实现:补间动画、帧动画和属性动画。
1. 补间动画:补间动画是指通过指定开始和结束状态,系统会自动完成状态之间的过渡动画。
常用的补间动画包括平移动画、缩放动画、旋转动画和淡入淡出动画。
补间动画是通过对目标视图的transform属性进行变换来实现的,通过对动画的属性值进行插值计算,系统会将中间状态渐变地应用到目标视图上,从而实现动画效果。
2. 帧动画:帧动画是指将连续的图片资源按照一定时间间隔依次播放,从而形成动画效果。
帧动画是通过逐帧显示不同的图片资源来实现的。
在Android中,帧动画可以通过逐个资源文件的方式创建,也可以通过在XML文件中定义动画资源实现。
3. 属性动画:属性动画是Android3.0引入的一种动画机制,相较于补间动画和帧动画,属性动画更加强大和灵活。
属性动画通过修改目标视图的属性值来实现动画效果。
在属性动画中,可以通过指定目标视图的属性名称和起始值以及结束值,系统会自动根据这些信息来计算出中间过渡值,并将其应用到目标视图上。
属性动画可以实现更加复杂和精细的动画效果,例如借助关键帧来定义关键状态,或者通过设置动画插值器来控制动画的速度曲线。
总的来说,Android动画的实现原理是通过改变视图的属性值来实现动画效果。
不同的动画类型有不同的实现方式,包括补间动画、帧动画和属性动画。
补间动画是通过对目标视图的属性进行变换来实现的,帧动画是逐帧显示不同的图片资源,而属性动画是通过修改目标视图的属性值来实现动画效果。
Android动画之渐变动画(TweenAnimation)详解(渐变、缩放、位移、旋转)
Android动画之渐变动画(TweenAnimation)详解(渐变、缩放、位移、旋转)本⽂实例讲述了Android动画之渐变动画(Tween Animation)。
分享给⼤家供⼤家参考,具体如下:Android 平台提供了两类动画。
⼀类是Tween动画,就是对场景⾥的对象不断的进⾏图像变化来产⽣动画效果(旋转、平移、放缩和渐变)。
第⼆类就是 Frame动画,即顺序的播放事先做好的图像,与gif图⽚原理类似。
下⾯就讲⼀下Tweene Animations。
主要类:Animation 动画AlphaAnimation 渐变透明度RotateAnimation 画⾯旋转ScaleAnimation 渐变尺⼨缩放TranslateAnimation 位置移动AnimationSet 动画集有了这些类,那么我们如何来实现动画效果呢?以⾃定义View为例,该View很简单,画⾯上只有⼀个图⽚。
现在我们要对整个View分别实现各种Tween动画效果。
AlphaAnimation通过代码实现 AlphaAnimation,如下://初始化Animation alphaAnimation = new AlphaAnimation(0.1f, 1.0f);//设置动画时间 alphaAnimation.setDuration(3000);this.startAnimation(alphaAnimation);其中AlphaAnimation类第⼀个参数fromAlpha表⽰动画起始时的透明度,第⼆个参数toAlpha表⽰动画结束时的透明度。
setDuration⽤来设置动画持续时间。
RotateAnimation代码:Animation rotateAnimation = new RotateAnimation(0f, 360f);rotateAnimation.setDuration(1000);this.startAnimation(rotateAnimation);其中RotateAnimation类第⼀个参数fromDegrees表⽰动画起始时的⾓度,第⼆个参数toDegrees表⽰动画结束时的⾓度。
关于动画设置的参数
关于动画设置的参数动画类型:Android中animation由四种类型组成在XML⽂件中: alpha 渐变透明度渐变效果 scale 渐变尺⼨伸缩渐变效果 translate 画⾯转换位置移动渐变效果 rotate 画⾯转移旋转渐变效果在Java 源码中定义了相应的类,可以使⽤这些类的⽅法来获取和操作相应的属性:1 AlphaAnimation //渐变透明度渐变效果2 ScaleAnimation //渐变尺⼨伸缩渐变效果3 TranslateAnimation //画⾯转换位置移动渐变效果4 RotateAnimation // 画⾯转移旋转渐变效果Animation 类及其⼦类的类图如下所⽰:android类及其⼦类Tween Animation:⼀个tween动画将对视图对象中的内容进⾏⼀系列简单的转换(位置,⼤⼩,旋转,透明度)。
如果你有⼀个⽂本视图对象,你可以移动它,旋转它,让它变⼤或让它变⼩,如果⽂字下⾯还有背景图像,背景图像也会随着⽂件进⾏转换。
使⽤XML来定义Tween Animation动画的XML⽂件在⼯程中res/anim⽬录,这个⽂件必须包含⼀个根元素,可以使<alpha><scale> <translate> <rotate>插值元素或者是把上⾯的元素都放⼊<set>元素组中,默认情况下,所有的动画指令都是同时发⽣的,为了让他们按序列发⽣,需要设置⼀个特殊的属性startOffset。
动画的指令定义了你想要发⽣什么样的转换,当他们发⽣了,应该执⾏多长时间,转换可以是连续的也可以使同时的。
例如,你让⽂本内容从左边移动到右边,然后旋转180度,或者在移动的过程中同时旋转,没个转换需要设置⼀些特殊的参数(开始和结束的⼤⼩尺⼨的⼤⼩变化,开始和结束的旋转⾓度等等,也可以设置些基本的参数(例如,开始时间与周期),如果让⼏个转换同时发⽣,可以给它们设置相同的开始时间,如果按序列的话,计算开始时间加上其周期。
AndroidAnimation动画(很详细)
AndroidAnimation动画(很详细)展开全文Android AnimationContents:•Animations•Tween Animations•AnimationSet•Interpolator•Frame-By-Frame Animations•LayoutAnimationsController•AnimationListenerAnimations一、Animations介绍Animations是一个实现android UI界面动画效果的API,Animations提供了一系列的动画效果,可以进行旋转、缩放、淡入淡出等,这些效果可以应用在绝大多数的控件中。
二、Animations的分类Animations从总体上可以分为两大类:1.Tweened Animations:该类Animations提供了旋转、移动、伸展和淡出等效果。
Alpha——淡入淡出,Scale——缩放效果,Rotate——旋转,Translate——移动效果。
2.Frame-by-frame Animations:这一类Animations可以创建一个Drawable序列,这些Drawable可以按照指定的时间间歇一个一个的显示。
三、Animations的使用方法(代码中使用)Animations extends Object implements Cloneable使用TweenedAnimations的步骤:1.创建一个AnimationSet对象(Animation子类);2.增加需要创建相应的Animation对象;3.更加项目的需求,为Animation对象设置相应的数据;4.将Animatin对象添加到AnimationSet对象当中;5.使用控件对象开始执行AnimationSet。
Tweened Animations的分类1、Alpha:淡入淡出效果2、Scale:缩放效果3、Rotate:旋转效果4、Translate:移动效果Animation的四个子类:AlphaAnimation、TranslateAnimation、ScaleAnimation、RotateAnimation四、具体实现1、main.xmlandroid:layout_width="wrap_content" android:layout_height="wrap_content" android:text="旋转"/><Buttonandroid:id="@+id/scaleButton" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="缩放"/><Buttonandroid:id="@+id/alphaButton" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="淡入淡出"/><Buttonandroid:id="@+id/translateButton" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="移动"/></LinearLayout><LinearLayoutandroid:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical"><ImageViewandroid:id="@+id/image" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:src="@drawable/an"/></LinearLayout>2、.java文件(Button)findViewById(R.id.translateButton);image= (ImageView)findViewById(R.id.image);rotateButton.setOnClickListener(new RotateButtonListener());scaleButton.setOnClickListener(new ScaleButtonListener());alphaButton.setOnClickListener(new AlphaButtonListener());translateButton.setOnClickListener(new TranslateButtonListener());}class AlphaButtonListener implements OnClickListener{public void onClick(View v) {//创建一个AnimationSet对象,参数为Boolean型,//true表示使用Animation的interpolator,false则是使用自己的AnimationSet animationSet =new AnimationSet(true);//创建一个AlphaAnimation对象,参数从完全的透明度,到完全的不透明AlphaAnimation alphaAnimation =new AlphaAnimation(1, 0);//设置动画执行的时间alphaAnimation.setDuration(500);//将alphaAnimation对象添加到AnimationSet当中animationSet.addAnimation(alphaAnimation);//使用ImageView的startAnimation方法执行动画image.startAnimation(animationSet);}}class RotateButtonListener implements OnClickListener{public void onClick(View v) {AnimationSet animationSet =new AnimationSet(true);//参数1:从哪个旋转角度开始//参数2:转到什么角度//后4个参数用于设置围绕着旋转的圆的圆心在哪里//参数3:确定x轴坐标的类型,有ABSOLUT绝对坐标、RELATIVE_TO_SELF相对于自身坐标、RELATIVE_TO_PARENT相对于父控件的坐标//参数4:x轴的值,0.5f表明是以自身这个控件的一半长度为x 轴//参数5:确定y轴坐标的类型//参数6:y轴的值,0.5f表明是以自身这个控件的一半长度为x 轴RotateAnimation rotateAnimation =new RotateAnimation(0, 360,Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0.5f);rotateAnimation.setDuration(1000);animationSet.addAnimation(rotateAnimation);image.startAnimation(animationSet);}}class ScaleButtonListener implements OnClickListener{public void onClick(View v) {AnimationSet animationSet =new AnimationSet(true);//参数1:x轴的初始值//参数2:x轴收缩后的值//参数3:y轴的初始值//参数4:y轴收缩后的值//参数5:确定x轴坐标的类型//参数6:x轴的值,0.5f表明是以自身这个控件的一半长度为x 轴//参数7:确定y轴坐标的类型//参数8:y轴的值,0.5f表明是以自身这个控件的一半长度为x 轴ScaleAnimation scaleAnimation =new ScaleAnimation(0, 0.1f,0,0.1f,Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0.5f);scaleAnimation.setDuration(1000);animationSet.addAnimation(scaleAnimation);image.startAnimation(animationSet);}}class TranslateButtonListener implements OnClickListener{public void onClick(View v) {AnimationSet animationSet =new AnimationSet(true);//参数1~2:x轴的开始位置//参数3~4:y轴的开始位置//参数5~6:x轴的结束位置//参数7~8:x轴的结束位置TranslateAnimation translateAnimation =new TranslateAnimation(Animation.RELATIVE_TO_SELF,0f,Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0f,Animation.RELATIVE_TO_SELF,0.5f);translateAnimation.setDuration(1000);animationSet.addAnimation(translateAnimation);image.startAnimation(animationSet);}}Tween Animations的通用方法1、setDuration(long durationMills)设置动画持续时间(单位:毫秒)2、setFillAfter(Boolean fillAfter)如果fillAfter的值为true,则动画执行后,控件将停留在执行结束的状态3、setFillBefore(Boolean fillBefore)如果fillBefore的值为true,则动画执行后,控件将回到动画执行之前的状态4、setStartOffSet(long startOffSet)设置动画执行之前的等待时间5、setRepeatCount(int repeatCount)设置动画重复执行的次数在代码中使用Animations可以很方便的调试、运行,但是代码的可重用性差,重复代码多。
Android属性动画之ValueAnimator代码详解
Android属性动画之ValueAnimator代码详解属性动画通过改变⼀个对象的属性值来进⾏动画,属性动画包含了以下⼏个特性:1、持续时间(Duration)主要⽤来定义动画的持续时间,默认值为300ms。
2、时间插值器(Time interpolation)指定时间变化的百分⽐,就是当前流逝时间除以指定的持续时间,这个可以⾃定义,继承Interpolator,重写getInterpolation⽅法。
3、重复次数和⾏为(Repeat count and behavior)指定动画的执⾏次数和动画的重复模式4、动画集(Animator sets)可以把多个动画放到⼀个集合中,是他们同时执⾏,或者指定它们直接的顺序和延迟。
5、Frame refresh delay(帧刷新延迟)可以指定如何去刷新动画的帧,默认是每10ms刷新⼀次,这个刷新也取决于系统的繁忙程度。
上⾯我们知道属性动画就是改变对象的属性值来实现动画,ValueAnimator的特点就是你不需要明确的指定你要改变的对象和属性,你只需要得到⼀个动态的值来⾃⼰去设置相应对象的属性,也就是它就是提供属性的变化值,你拿到这个值可以动态的更改对象属性值。
总结⼀句就是监听动画过程,⾃⼰实现属性的改变。
举个例⼦:// 这⾥指定了值的变化范围ValueAnimator animator = ValueAnimator.ofFloat(0, 500);// 这⾥指定变化持续时间animator.setDuration(1000);//开始动画animator.start()//开始动画后,我们可以动态的获取变化值animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener(){@Overridepublic void onAnimationUpdate(ValueAnimator animation){//根据变化值来设置imageView对象的Y轴坐标,这样就实现了imageView的垂直移动imageView.setTranslationY((Float) animation.getAnimatedValue());}});上⾯使⽤imageView.setTranslationY((Float) animation.getAnimatedValue())来动态的改变图⽚的translationY属性,需要说明的是,如果在低版本中,我们使⽤的是NineOldAnimations这个库,⽤法跟系统基本⼀致,在NineOldAnimations⾥⾯我们动态改变对象的属性的时候,它提供了⼀个ViewHelper类,它是设置各种动画值的帮助类,可以简单的设置并应⽤动画值。
Android开发TranslateAnimation详解
Android开发TranslateAnimation详解android中提供了如下4种动画效果:1、AlphaAnimation 透明度动画效果2、ScaleAnimation 缩放动画效果3、TranslateAnimation 位移动画效果4、RotateAnimation 旋转动画效果今天主要讲解TranslateAnimation 位移动画效果的实现方法。
TranslateAnimation包括:float fromXDelta, float toXDelta, float fromYDelta, float toYDelta分别是:float fromXDelta 动画开始的点离当前View X坐标上的差值float toXDelta 动画结束的点离当前View X坐标上的差值float fromYDelta 动画开始的点离当前View Y坐标上的差值float toYDelta 动画开始的点离当前View Y坐标上的差值常用方法:1.animation.setDuration(long durationMillis);//设置动画持续时间2.animation.setRepeatCount(int i);//设置重复次数3.animation.setRepeatMode(Animation.REVERSE);//设置反方向执行复制代码Xml属性:1.android:duration:运行动画的时间2.android:repeatCount:定义动画重复的时间复制代码代码示例:1.public class MainActivity extends Activity {2.ImageView image;3.Button start;4.Button cancel;5.@Override6.public void onCreate(Bundle savedInstanceState) {7.super.onCreate(savedInstanceState);8.setContentView(/doc/b416665264.h tml,yout.activity_main);9.image = (ImageView) findViewById(R.id.main_img);10.start = (Button) findViewById(R.id.main_start);11.cancel = (Button) findViewById(R.id.main_cancel);12./** 设置位移动画向右位移150 */13.final TranslateAnimation animation = new TranslateAnimation(0, 150,0,0);14.animation.setDuration(2000);//设置动画持续时间15.animation.setRepeatCount(2);//设置重复次数16.animation.setRepeatMode(Animation.REVERSE);//设置反方向执行17.start.setOnClickListener(new OnClickListener() {18.public void onClick(View arg0) {19.image.setAnimation(animation);20./** 开始动画 */21.animation.startNow();22.}23.});24.cancel.setOnClickListener(new OnClickListener() {25.public void onClick(View v) {26./** 结束动画 */27.animation.cancel();28.}29.});30.}31.}复制代码更多android开发学习资料,请至麦子学院官网查看>/doc/b416665264.html,/course/2/。
Android开发动画效果被遮掉的解决方法
Android开发动画效果被遮掉的解决方法最近给自已负责的项目里,个别交互增加了一些动画效果。
发现了一个很常见的动画效果问题。
问题描述蓝色框包含的区域是一个停靠在页面底部的浮动菜单。
当用户点了左边购物车按钮时,要用一个动画效果:购物车图标从当前位置滑动到页面右上角的一个查看购物车按钮上。
一般的实现思路:这里假设购物车View 对象为cartView;页面右上角的View对象为rightBtn;1.ImageView cartView = (ImageView) findViewById(R.id.btn_drug_detail_cart);2. Button rightBtn = (Button) findViewById(R.id.right_btn);3.4. int[] start_location = new int[2];5. cartView.getLocationInWindow(start_location);6.7. int[] end_location = new int[2];8. rightBtn.getLocationInWindow(end_location);9. int endX = end_location[0];10. int endY = end_location[1] - start_location[1];11. Logger.i("endX:"+endX+",endY"+endY);12. Animation mTranslateAnimation = new TranslateAnimation(TranslateAnimation.RELATIVE_TO_SELF, 0.0f, TranslateAnimation.ABSOLUTE, endX, TranslateAnimation.RELATIVE_TO_SELF, 0.0f, TranslateAnimation.ABSOLUTE, endY);// 移动13. mTranslateAnimation.setDuration(3000);14. AnimationSet mAnimationSet=new AnimationSet(false);15. mAnimationSet.setFillAfter(true);16. mAnimationSet.addAnimation(mTranslateAnimation);17. view.startAnimation(mAnimationSet);18.在购物车的单击事件里执行此动画代码,发现购物车图标是移动了,当移出蓝色区域边框时,消失了。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Android动画开发——Animation动画效果Android开发, 动画效果动画类型Android的animation由四种类型组成XML中JavaCode中Android动画模式Animation主要有两种动画模式:一种是tweened animation(渐变动画)一种是frame by frame(画面转换动画)如何在XML文件中定义动画①打开Eclipse,新建Android工程②在res目录中新建anim文件夹③在anim目录中新建一个myanim.xml(注意文件名小写)④加入XML的动画代码1.<?xml version="1.0" encoding="utf-8"?>2.<set xmlns:android="/apk/res/android">3. <alpha/>4. <scale/>5. <translate/>6. <rotate/>7.</set>复制代码Android动画解析--XML<alpha>1.<?xml version="1.0" encoding="utf-8"?>2.<set xmlns:android="/apk/res/android" >3.<alpha4.android:fromAlpha="0.1"5.android:toAlpha="1.0"6.android:duration="3000"7./>8.<!-- 透明度控制动画效果 alpha9.浮点型值:10. fromAlpha 属性为动画起始时透明度11. toAlpha 属性为动画结束时透明度12.说明:13. 0.0表示完全透明14. 1.0表示完全不透明15.以上值取0.0-1.0之间的float数据类型的数字16.17.长整型值:18. duration 属性为动画持续时间19.说明:20.时间以毫秒为单位21.-->22.</set>复制代码<scale>1.<?xml version="1.0" encoding="utf-8"?>2.<set xmlns:android="/apk/res/android">3. <scale4. android:interpolator=5. "@android:anim/accelerate_decelerate_interpolator"6. android:fromXScale="0.0"7. android:toXScale="1.4"8. android:fromYScale="0.0"9. android:toYScale="1.4"10. android:pivotX="50%"11. android:pivotY="50%"12. android:fillAfter="false"13. android:duration="700" />14.</set>15.<!-- 尺寸伸缩动画效果 scale16.属性:interpolator 指定一个动画的插入器17.在我试验过程中,使用android.res.anim中的资源时候发现18.有三种动画插入器:19. accelerate_decelerate_interpolator 加速-减速动画插入器20. accelerate_interpolator 加速-动画插入器21. decelerate_interpolator 减速- 动画插入器22.其他的属于特定的动画效果23.浮点型值:24.25. fromXScale 属性为动画起始时 X坐标上的伸缩尺寸26. toXScale 属性为动画结束时 X坐标上的伸缩尺寸27.28. fromYScale 属性为动画起始时Y坐标上的伸缩尺寸29. toYScale 属性为动画结束时Y坐标上的伸缩尺寸30.31.说明:32.以上四种属性值33.34. 0.0表示收缩到没有35. 1.0表示正常无伸缩36.值小于1.0表示收缩37.值大于1.0表示放大38.39. pivotX 属性为动画相对于物件的X坐标的开始位置40. pivotY 属性为动画相对于物件的Y坐标的开始位置41.42.说明:43.以上两个属性值从0%-100%中取值44. 50%为物件的X或Y方向坐标上的中点位置45.46.长整型值:47. duration 属性为动画持续时间48.说明: 时间以毫秒为单位49.50.布尔型值:51. fillAfter 属性当设置为true ,该动画转化在动画结束后被应用52.-->复制代码<translate>1.<?xml version="1.0" encoding="utf-8"?>2.<set xmlns:android="/apk/res/android">3.<translate4.android:fromXDelta="30"5.android:toXDelta="-80"6.android:fromYDelta="30"7.android:toYDelta="300"8.android:duration="2000"9./>10.<!-- translate 位置转移动画效果11.整型值:12. fromXDelta 属性为动画起始时 X坐标上的位置13. toXDelta 属性为动画结束时 X坐标上的位置14. fromYDelta 属性为动画起始时 Y坐标上的位置15. toYDelta 属性为动画结束时 Y坐标上的位置16.注意:17.没有指定fromXType toXType fromYType toYType 时候,18.默认是以自己为相对参照物19.长整型值:20. duration 属性为动画持续时间21.说明: 时间以毫秒为单位22.-->23.</set>复制代码<rotate>1.<?xml version="1.0" encoding="utf-8"?>2.<set xmlns:android="/apk/res/android">3.<rotate4. android:interpolator="@android:anim/accelerate_decelerate_interpolator"5. android:fromDegrees="0"6. android:toDegrees="+350"7. android:pivotX="50%"8. android:pivotY="50%"9. android:duration="3000" />10.<!-- rotate 旋转动画效果11.属性:interpolator 指定一个动画的插入器12.在我试验过程中,使用android.res.anim中的资源时候发现13.有三种动画插入器:14. accelerate_decelerate_interpolator 加速-减速动画插入器15. accelerate_interpolator 加速-动画插入器16. decelerate_interpolator 减速- 动画插入器17.其他的属于特定的动画效果18.19.浮点数型值:20. fromDegrees 属性为动画起始时物件的角度21. toDegrees 属性为动画结束时物件旋转的角度可以大于360度22.23.24.说明:25.当角度为负数——表示逆时针旋转26.当角度为正数——表示顺时针旋转27. (负数from——to正数:顺时针旋转)28. (负数from——to负数:逆时针旋转)29. (正数from——to正数:顺时针旋转)30. (正数from——to负数:逆时针旋转)31.32. pivotX 属性为动画相对于物件的X坐标的开始位置33. pivotY 属性为动画相对于物件的Y坐标的开始位置34.35.说明: 以上两个属性值从0%-100%中取值36. 50%为物件的X或Y方向坐标上的中点位置37.38.长整型值:39. duration 属性为动画持续时间40.说明: 时间以毫秒为单位41.-->42.</set>复制代码如何使用XML中的动画效果1.public static Animation loadAnimation (Context context, int id)2.//第一个参数Context为程序的上下文3.//第二个参数id为动画XML文件的引用4.//例子:5.myAnimation= AnimationUtils.loadAnimation(this,R.anim.my_action);6.//使用AnimationUtils类的静态方法loadAnimation()来加载XML中的动画XML文件复制代码如何在Java代码中定义动画1.//在代码中定义动画实例对象2.private Animation myAnimation_Alpha;3.private Animation myAnimation_Scale;4.private Animation myAnimation_Translate;5.private Animation myAnimation_Rotate;6.7. //根据各自的构造方法来初始化一个实例对象8.myAnimation_Alpha=new AlphaAnimation(0.1f, 1.0f);9.10.myAnimation_Scale =new ScaleAnimation(0.0f, 1.4f, 0.0f, 1.4f,11. Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF,0.5f);12.13.myAnimation_Translate=new TranslateAnimation(30.0f, -80.0f, 30.0f, 300.0f);14.15.myAnimation_Rotate=new RotateAnimation(0.0f, +350.0f,16. Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0.5f);复制代码Android动画解析--JavaCodeAlphaAnimation①AlphaAnimation类对象定义1. 1. private AlphaAnimation myAnimation_Alpha;复制代码②AlphaAnimation类对象构造1.AlphaAnimation(float fromAlpha, float toAlpha)2.//第一个参数fromAlpha为动画开始时候透明度3.//第二个参数toAlpha为动画结束时候透明度4.myAnimation_Alpha=new AlphaAnimation(0.1f, 1.0f);5.//说明:6.// 0.0表示完全透明7.// 1.0表示完全不透明复制代码③设置动画持续时间1.myAnimation_Alpha.setDuration(5000);2.//设置时间持续时间为 5000毫秒复制代码ScaleAnimation①ScaleAnimation类对象定义1.private AlphaAnimation myAnimation_Alpha;复制代码②ScaleAnimation类对象构造1.ScaleAnimation(float fromX, float toX, float fromY, float toY,2. int pivotXType, float pivotXValue, int pivotYType, float pivotYValue)3.//第一个参数fromX为动画起始时 X坐标上的伸缩尺寸4.//第二个参数toX为动画结束时 X坐标上的伸缩尺寸5.//第三个参数fromY为动画起始时Y坐标上的伸缩尺寸6.//第四个参数toY为动画结束时Y坐标上的伸缩尺寸7./*说明:8.以上四种属性值9. 0.0表示收缩到没有10. 1.0表示正常无伸缩11.值小于1.0表示收缩12.值大于1.0表示放大13.*/14.//第五个参数pivotXType为动画在X轴相对于物件位置类型15.//第六个参数pivotXValue为动画相对于物件的X坐标的开始位置16.//第七个参数pivotXType为动画在Y轴相对于物件位置类型17.//第八个参数pivotYValue为动画相对于物件的Y坐标的开始位置18.myAnimation_Scale =new ScaleAnimation(0.0f, 1.4f, 0.0f, 1.4f,19. Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF,0.5f);复制代码③设置动画持续时间1.myAnimation_Scale.setDuration(700);2.//设置时间持续时间为 700毫秒复制代码TranslateAnimation①TranslateAnimation类对象定义1.private AlphaAnimation myAnimation_Alpha;复制代码②TranslateAnimation类对象构造1.TranslateAnimation(float fromXDelta, float toXDelta,2. float fromYDelta, float toYDelta)3.//第一个参数fromXDelta为动画起始时 X坐标上的移动位置4.//第二个参数toXDelta为动画结束时 X坐标上的移动位置5.//第三个参数fromYDelta为动画起始时Y坐标上的移动位置6.//第四个参数toYDelta为动画结束时Y坐标上的移动位置复制代码③设置动画持续时间1.myAnimation_Translate.setDuration(2000);复制代码RotateAnimation①RotateAnimation类对象定义1.private AlphaAnimation myAnimation_Alpha;复制代码②RotateAnimation类对象构造1.RotateAnimation(float fromDegrees, float toDegrees,2. int pivotXType, float pivotXValue, int pivotYType, floatpivotYValue)3.//第一个参数fromDegrees为动画起始时的旋转角度4.//第二个参数toDegrees为动画旋转到的角度5.//第三个参数pivotXType为动画在X轴相对于物件位置类型6.//第四个参数pivotXValue为动画相对于物件的X坐标的开始位置7.//第五个参数pivotXType为动画在Y轴相对于物件位置类型8.//第六个参数pivotYValue为动画相对于物件的Y坐标的开始位置9.myAnimation_Rotate=new RotateAnimation(0.0f, +350.0f,10. Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0.5f);复制代码③设置动画持续时间1.myAnimation_Rotate.setDuration(3000);复制代码如何使用Java代码中的动画效果使用从View父类继承过来的方法startAnimation()来为View或是子类View等等添加一个动画效果1.public void startAnimation (Animation animation)复制代码。