您的位置:首页 > 其它

动画资源

2016-05-24 15:56 218 查看
动画资源
一、分类:(一)、概要:        3.0以前,android支持两种动画模式,补间动画(tween animation),帧动画(frameanimation),在android3.0中又引入了一个新的动画系统:属性动画(property animation)。        这三种动画模式在SDK中被称为view animation,drawable animation,property animation。(二)、动画资源分类:属性动画:Property Animation帧动画:Frame Animation (Drawable Animation)补间动画:Tween Animation (View Animation)透明度补间动画缩放补间动画旋转补间动画移动补间动画二、补间动画:        View Animation就是一系列View形状的变换,如大小的缩放、透明度的改变、水平位置的改变、旋转位置改变,动画的定义既可以用java代码定义也可以用XML定义。建议用XML定义。        用XML定义的动画放在/res/anim/文件夹内,XML文件的根元素为<set>, 二级节点可为<alpha>,<scale>,<translate>,<rotate>。(一)、用xml资源实现补间动画:
(二)、用java代码实现补间动画:
publicclass MainActivity extends Activity {private ImageView imageView_main;private Animation animation = null;@Overrideprotectedvoid onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);imageView_main = (ImageView) findViewById(R.id.imageView_main);}publicvoid 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/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代码:
public class MainActivity extends Activity{private ImageView imageView_main_show;private AnimationDrawable animationDrawable = null;@Overrideprotected void onCreate(BundlesavedInstanceState) {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();}public void clickButton(Viewview) {switch (view.getId()) {case R.id.button_main_start:if (!animationDrawable.isRunning()){                                //一组动画是否只播放一次animationDrawable.setOneShot(false);animationDrawable.start();}break;case R.id.button_main_stop:if (animationDrawable.isRunning()){animationDrawable.stop();}break;}}@Overridepublic void onWindowFocusChanged(boolean hasFocus){super.onWindowFocusChanged(hasFocus);if (!animationDrawable.isRunning()){animationDrawable.setOneShot(false);animationDrawable.start();}}}【备注:】        SDK中提到,不要在onCreate()中调用start(),因为AnimationDrawable还没有完全跟Window相关联,如果想要界面显示时就开始动画的话,可以在onWindowFoucsChanged()中调用start()。四、属性动画:(一)、概念:        属性动画,这个是在Android 3.0中才引进的。Property Animation故名思议就是通过动画的方式改变对象的属性.属性动画更改的是对象的实际属性,在ViewAnimation(Tween Animation)中,其改变的是View的绘制效果,真正的View的属性保持不变。可以将属性动画理解为增强版的补间动画。        比如无论如何缩放Button的大小,Button的有效点击区域还是没有应用动画时的区域,其位置与大小都不变。而在Property Animation中,改变的是对象的实际属性,如Button的缩放,Button的位置与大小属性值都改变了。        Property Animation不止可以应用于View,还可以应用于任何对象。Property Animation只是表示一个值在一段时间内的改变,当值改变时要做什么事情完全是你自己决定的。(二)、常用属性:Duration动画的持续时间,默认300ms。android:duration属性Time interpolation:时间插值。LinearInterpolator、AccelerateDecelerateInterpolator,定义动画的变化率。android:interpolator属性Repeat count and behavior:重复次数、以及重复模式;可以定义重复多少次;重复时从头开始,还是反向。android:repeatCount属性Animator sets: 动画集合,你可以定义一组动画,一起执行或者顺序执行。<set/>,该元素的android:ordering属性指定该组动画是按次序播放还是同时播放。Frame refresh delay:帧刷新延迟(帧刷新频率,每个多久播放一帧);默认为10ms,但最终依赖系统的当前状态。(三)、属性动画API:相关的类ObjectAnimator 动画的执行类(是ValueAnimator的子类,使用简单常用。少数场景下,由于其存在一些限制,再考虑使用ValueAnimator)ValueAnimator 动画的执行类AnimatorSet 用于控制一组动画的执行:线性,一起,每个动画的先后执行等。AnimatorInflater 用户加载属性动画的xml文件TypeEvaluator 类型估值,主要用于设置动画操作属性的值。TimeInterpolator 时间插值总的来说,属性动画就是,动画的执行类来设置动画操作的对象的属性、持续时间,开始和结束的属性值,时间差值等,然后系统会根据设置的参数动态的变化对象的属性。(一)、实例代码:
一、res/anim/property_anim.xml的代码:
<set xmlns: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代码:
publicclass MainActivity extends Activity{private ImageView imageView_main_obj;private Move move;@Overridepublicvoid onCreate(BundlesavedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);imageView_main_obj = (ImageView) findViewById(R.id.imageView_main_obj);move = new Move();imageView_main_obj.setOnClickListener(new OnClickListener(){@Overridepublicvoid onClick(Viewv) {setTitle(move.getX() + ":" + move.getY());}});}class Move {privateinty;privateintx;publicint getY(){returny;}publicvoid setY(int y){this.y = y;imageView_main_obj.layout(imageView_main_obj.getLeft(),y,imageView_main_obj.getRight(),y + imageView_main_obj.getMeasuredHeight());}publicint getX(){returnx;}publicvoid setX(int x){this.x = x;imageView_main_obj.layout(x, imageView_main_obj.getTop(),x+ imageView_main_obj.getMeasuredWidth(),imageView_main_obj.getBottom());}}publicvoid clickButton(Viewview) {// 装载属性动画资源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"   可以是整数或者infiniteandroid:repeatMode="restart"    可以是restart 或者 reverseandroid:valueFrom=" "     整数|浮点数|颜色
                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: