使用属性动画(Animator)来完成动画

一直以来,完成动画的时候都使用的是AniamtionSet,把所有的动画放在一个集合中,这就是传统的动画,但是这存在有很大的弊端,例如下边一段代码,布局文件分别由一个IamgeView和一个Button组成,对Button和ImageVew添加如下监听事件:

 1 @Override
 2     public void onClick(View view) {
 3         // TODO Auto-generated method stub
 4         switch (view.getId()) {
 5         //对ImageView添加监听
 6         case R.id.img:
 7             Toast.makeText(MainActivity.this, "clicked", Toast.LENGTH_SHORT).show();
 8             break;
 9         //对按钮添加监听,是ImageView沿XY轴对角线向下平移180个像素
10         case R.id.btn_move:
11         {
12             TranslateAnimation trans = new TranslateAnimation(0,180,0,180);
13             trans.setDuration(1000);
14             trans.setFillAfter(true);;
15             img.startAnimation(trans);
16         }
17     }

当程序运行完后,你会发现一个奇怪的现象:

       

当你去点击图片的原始位置时,即时图片已经移动走了,但是你点击图片原来的空白位置,仍然会触发ImageView的点击事件,而你去点击移动后的这张图片,他却不会触发ImageView的点击事件。

所以说,使用传统 的动画存在一定的弊端,下面对属性动画简单的进行使用。

1 ObjectAnimator.ofFloat(img, "translationY", 0F,180F).setDuration(1000).start();
2 ObjectAnimator.ofFloat(img, "translationX", 0F,180F).setDuration(1000).start();

使用ObjectAnimator来对动画进行控制的时候,只需要调用ofFloat()就可以了,这个方法的参数分别代表:

* 1、要操作的对象
* 2、要操作对象的属性
* 3、动画变化的范围

将对Button的监听改为以上代码后,就不会出现上述奇怪的现象了,就会实现“指哪打哪”的效果了。

不积跬步,无以至千里;不积小流,无以成江海

时间: 2024-08-07 08:57:28

使用属性动画(Animator)来完成动画的相关文章

Android 一般动画animation和属性动画animator

package com.example.animation; import android.app.Activity; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.animation.TranslateAnimation; import android.widget.ImageView;

Android之Fragment,帧动画,补件动画,属性动画

Fragment: 在安卓手机越来越大的情况下,一个屏幕显示只显示一个内容,会显得空旷,布局不够好看,屏幕利用的也不够充分.通常在平板中会出现这种情况,但是由于现在的手机屏幕越来越大,所以在3.0之后引入了Fragment.也可以使用支持类库,来向下兼容低版本.它的生命周期方法和activity一样 使用Fragment可以让我们更加充分地利用手机的屏幕空间,他可以在一个activity中有多个Fragment,多个Fragment可以显示不同的内容. 我们通过简单的demo来了解什么是Frag

jQuery - 02. 样式表属性操作/类操作、动画、显示隐藏、滑入、淡入、停止动画、节点操作、添加对象、清空节点

样式表属性操作.css $("div").css({'width':100,'height':100,'background':'red'}); $("div").css("background","pink"); 类操作 .addClass添加类   $("div").addClass("class"); .removeClass删除类   $("div).removeCla

android动画详解三 动画API概述

· 属性动画与view动画的不同之处 view动画系统提供了仅动画View 对象的能力,所以如果你想动画非View 对象,你就要自己实现代码. view动画系统实际上还被强制仅能对 View 的少数属性进行动画,比如缩放和旋转,而不能对背景色进行. view动画的另一个坏处是它仅修改View的绘制位置,而不是View的实际位置.例如,如果你动画一个移动穿越屏幕,button的绘制位置是正确的,但实际你可以点击它的位置却没有变,所以你必须去实现你自己的逻辑来处理它. 使用属性动画系统时,这个限制被

【Away3D代码解读】(五):动画模块及骨骼动画

动画模块核心存放在away3d.animators包里: Away3D支持下面几种动画格式: VertexAnimator:顶点动画 SkeletonAnimator:骨骼动画 UVAnimator:UV动画 SpriteSheetAnimator:二维切换动画 ParticleAnimator:粒子动画 PathAnimator:路径动画 这几种动画都有各自的特点及应用场景,一般而在3D游戏中应用得最广泛的是骨骼动画,因为骨骼动画是人物动画的核心,我们下半段会专门详解这个动画: 动画简介 核心

iOS动画开发之一——UIViewAnimation动画的使用

iOS动画开发之一--UIViewAnimation动画的使用 一.简介 一款APP的成功与否,除了完善的功能外,用户体验也占有极大的比重,动画的合理运用,可以很好的增强用户体验.iOS开发中,常用的动画处理有UIView动画编程和核心动画编程,其中UIView动画使用简便,开发中应用十分广泛.这篇博客,主要讨论UIView的动画使用. 二.UIView动画的几个方法 + (void)animateWithDuration:(NSTimeInterval)duration animations:

Android动画--帧动画和补间动画

帧动画 首先我们定义在drawable文件夹下定义一个xml文件 里面包含我们要播放的动画的图片,以及每一帧动画的播放的时长 <?xml version="1.0" encoding="utf-8"?> <animation-list xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@mi

动画(Animation) 、 高级动画(Core Animation)

1 演示UIImage制作的动画 1.1 问题 UIImage动画是IOS提供的最基本的动画,通常用于制作一些小型的动画,本案例使用UIImage制作一个小狗跑动的动画,如图-1所示: 图-1 1.2 方案 首先在创建好的Xcode项目的Storyboard中拖放一个ImageView控件,并关联成TRViewController的属性imageView. 然后在viewDidLoad方法中使用工厂方法animatedImageNamed:创建UIImage对象image. 最后将imageVi

iOS:核心动画之转场动画CATransition

转场动画——CATransition CATransition是CAAnimation的子类,用于做转场动画,能够为层提供移出屏幕和移入屏幕的动画效果.iOS比Mac OS X的转场动画效果少一点 UINavigationController就是通过CATransition实现了将控制器的视图推入屏幕的动画效果 动画属性: –type:动画过渡类型 –subtype:动画过渡方向 –startProgress:动画起点(在整体动画的百分比) –endProgress:动画终点(在整体动画的百分比

Android动画效果——1.帧动画2.补间动画3.跳转画面(三)

Android--动画效果1.帧动画2.补间动画3.跳转画面 插值器类 xml属性值 说明 LinearInterpolator @android:anim/linear_interpolatorr 动画以均匀的速度改变. AccelerateInterpolator @android:anim/accelerate_interpolator 在动画开始时改变速度较慢,然后开始加速. AccelerateDecelerateInterpolator @android:anim/accelerat