
本文以一个简单的小例子,简述在AndroID开发中,动画的简单应用,仅供学习分享使用。
概述androID提供了各种强大的APIs,用于将动画应用到ui元素中,来丰富应用程序的功能和应用。
动画分类在AndroID框架中,动画主要分为三类【这三种动画系统都是可行的选择,但一般来说,属性动画系统是首选的使用方法,因为它更灵活,提供了更多的功能】,具体如下:
帧动画:将图像资源按顺序一帧一帧的播放出来,形成动画()。补间动画:又叫视图动画,是比较旧的系统,只能用于视图组件,相对比较容易设置和提供能力满足程序的需要。属性动画:在androID 3.0(API等级11)中引入的属性动画系统,允许您对任何对象的属性进行动画处理,包括未呈现到屏幕上的属性。该系统是可扩展的,并允许自定义动画类型的属性。帧动画将动画资源文件作为图片控件(ImageVIEw)的背景图(background)。
帧动画涉及知识点如下:
AnimationDrawable: 用于创建逐帧动画的对象,由一系列可拖动对象,可用作视图对象的背景。isRunning() 是否正在运行stop() 停止动画start() 开始运行帧动画核心代码
在drawable目录下,新增一个动画资源配置文件【animation-List节点下包含item子节点,item有两个属性,androID:drawable=图像资源ID,androID:duration=周期】,如下:
1 <?xml version="1.0" enCoding="utf-8"?> 2 <animation-List xmlns:androID="http://schemas.androID.com/apk/res/androID"> 3 item androID:drawable="@drawable/n0" androID:duration="300"></item 4 ="@drawable/n1" 5 ="@drawable/n2" 6 ="@drawable/n3" 7 ="@drawable/n4" 8 ="@drawable/n5" 9 ="@drawable/n6"10 ="@drawable/n7"11 ="@drawable/n8"12 ="@drawable/n9"13 </animation-List>
java设置代码如下:
private AnimationDrawable drawable; 2 3 @OverrIDeprotected voID onCreate(Bundle savedInstanceState) { 5 super.onCreate(savedInstanceState); 6 setContentVIEw(R.layout.activity_drawable); 7 ImageVIEw imageVIEw= (ImageVIEw) this.findVIEwByID(R.ID.ivLetter); 8 drawable= (AnimationDrawable) imageVIEw.getBackground(); 9 drawable.start();10 }11 12 13 public boolean ontouchEvent(MotionEvent event) {14 if(event.getAction()==MotionEvent.ACTION_DOWN){15 if(drawable.isRunning()) {16 drawable.stop();17 }else{18 drawable.start();19 }20 }21 return .ontouchEvent(event);22 }补间动画
补间动画,又称渐变动画是指定义起始状态,结束状态,中间状态等,然后其他部分由程序自动生成,从而形成动画。
补间动画涉及知识点如下:
TranslateAnimation 平移动画 控制对象位置的动画。RotateAnimation 旋转动画 控制对象旋转的动画。这个旋转需要放置在xy平面上。您可以指定中心要使用的点,其中(0,0)是左上角。如果未指定,则(0,0)为默认旋转点。ScaleAnimation 缩放动画 控制对象的比例尺的动画。您可以指定点用于缩放中心。AlphaAnimation 透明度动画 控制对象的Alpha级的动画,通过更改透明度属性,对于对象的淡入淡出,这是一个很有用的方法。AnimationSet 动画集合 上述动画可以组合使用。setFillAfter(true); 设置动画结束后的填充setDuration(2000); 动画周期setRepeatCount(2); 重复次数setRepeatMode(Animation.REVERSE); 重复模式补间动画核心代码如下:
1 /** * 平移 * @param v 4 */protected transfer_click(VIEw v){ 6 7 //参数是平移的起始坐标和结束坐标(起始X轴位置,结束X轴位置,起始Y轴位置,结束Y轴位置)的改变量。 8 TranslateAnimation trans=new TranslateAnimation(0.0f,300f,0.0f,300f); 9 fromXType 动画平移改变量的类型10 Animation.relative_TO_SELF,0 表示控件现在的坐标+0*控件本身的宽度或高度11 12 Animation.relative_TO_PARENT 相对于父控件,计算方式和Animation.relative_TO_SELF一样13 fromXValue 起始坐标值的改变量,如果类型是absolute,则此值为绝对数字,否则则表示百分比(0-1)之间。14 TranslateAnimation trans=new TranslateAnimation(Animation.relative_TO_SELF,Animation.relative_TO_SELF,1,1);15 trans.setDuration(2000);设置周期16 trans.setFillAfter(true);当结束时保持结束位置17 trans.setRepeatCount(2);设置重复次数18 trans.setRepeatMode(Animation.REVERSE);重复模式19 ivTaichi.startAnimation(trans);启动21 22 23 * 旋转24 25 26 rotate_click(VIEw v){27 参数是旋转的起始偏移量(度数),结束度数,旋转中心点(相对x轴 位置和y轴位置)。28 RotateAnimation rotate=new RotateAnimation(0.0f,90.f,100.0f,100.0f);29 RotateAnimation rotate =new RotateAnimation(0.0f,360.0f,0.5f,0.5f30 rotate.setFillAfter(true31 rotate.setDuration(200032 rotate.setRepeatCount(233 rotate.setRepeatMode(Animation.REVERSE);34 ivTaichi.startAnimation(rotate);35 36 37 38 * 缩放39 40 41 scale_click(VIEw v){42 fromX toX 动画起始和结束时的X轴水平缩放因子43 fromY toY 动画起始和结束时的Y轴水平缩放因子44 ScaleAnimation scale=new ScaleAnimation(0.5f,1.5f,1.5f45 scale.setFillAfter(46 scale.setDuration(200047 scale.setRepeatCount(248 scale.setRepeatMode(Animation.REVERSE);49 ivTaichi.startAnimation(scale);50 51 52 53 * 透明度动画54 55 56 Alpha_click(VIEw v){57 fromAlpha toAlpha 动画起始和结束时的透明度。范围(0,1)58 AlphaAnimation Alpha=new AlphaAnimation(0,1)">59 Alpha.setFillAfter(60 Alpha.setDuration(200061 Alpha.setRepeatCount(262 Alpha.setRepeatMode(Animation.REVERSE);63 ivTaichi.startAnimation(Alpha);64 65 66 67 * 集合动画68 69 70 set_click(VIEw v){71 AnimationSet set=new AnimationSet(72 TranslateAnimation animation1=new TranslateAnimation(0.0f,300.0f,300.0f);73 RotateAnimation animation2 =74 ScaleAnimation animation3=new ScaleAnimation(0.0f,1.0f,1.0f75 AlphaAnimation animation4=76 set.addAnimation(animation1);77 set.addAnimation(animation2);78 set.addAnimation(animation3);79 set.addAnimation(animation4);80 set.setFillAfter(81 set.setDuration(200082 set.setRepeatCount(283 set.setRepeatMode(Animation.REVERSE);84 ivTaichi.startAnimation(set);85 }属性动画
属性动画主要通过改变对象的属性,来实现动画,可以进行扩展,且功能丰富。
属性动画涉及知识点如下:
ObjectAnimator 该ValueAnimator的子类提供了对目标对象上的动画属性的支持。该类的构造函数使用参数来定义将被动画化的目标对象以及将被动画化的属性的名称。setDuration(2000); 动画周期setRepeatCount(2); 重复次数setRepeatMode(Animation.REVERSE); 重复方式start(); 启动属性动画核心代码如下:
6 target 属性动画的目标控件propertyname 产生动画的属性,所有的属性必须拥有set,get方法values 属性动画的范围集合 9 ObjectAnimator objectAnimator =ObjectAnimator.offloat(ivTaichi,"translationX",200,-200,010 objectAnimator.setDuration(200011 objectAnimator.setRepeatCount(2 objectAnimator.setRepeatMode(Animation.REVERSE); objectAnimator.start();14 15 16 17 19 20 21 ObjectAnimator objectAnimator =ObjectAnimator.offloat(ivTaichi,"rotationX",18022 objectAnimator.setDuration(200023 objectAnimator.setRepeatCount(225 26 27 28 29 30 31 32 33 ObjectAnimator objectAnimator =ObjectAnimator.offloat(ivTaichi,"scaleX",1)">34 objectAnimator.setDuration(200035 objectAnimator.setRepeatCount(236 37 39 40 41 * 透明度42 43 44 45 ObjectAnimator objectAnimator =ObjectAnimator.offloat(ivTaichi,"Alpha",1)">46 objectAnimator.setDuration(200047 objectAnimator.setRepeatCount(249 57 AnimatorSet set=new AnimatorSet();58 List<Animator> List=new ArrayList<Animator>() ;59 ObjectAnimator objectAnimator1 =ObjectAnimator.offloat(ivTaichi,20060 ObjectAnimator objectAnimator2 =ObjectAnimator.offloat(ivTaichi,1)">61 ObjectAnimator objectAnimator3 =ObjectAnimator.offloat(ivTaichi,1)">62 ObjectAnimator objectAnimator4 =ObjectAnimator.offloat(ivTaichi,1)">63 List.add(objectAnimator1); List.add(objectAnimator2);65 List.add(objectAnimator3);66 List.add(objectAnimator4);67 播放一序列的动画对象 set.playSequentially(List);69 //70 set.start();71 }
备注
学而不思则罔,思而不学则殆!!!
总结以上是内存溢出为你收集整理的一起学Android之Animation全部内容,希望文章能够帮你解决一起学Android之Animation所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)