属性动画步骤总结——包含xml实现与java代码实现
2016-07-18 20:15
465 查看
package com.oldeleven.day18_propertyanimatorfirst; import android.animation.Animator; import android.animation.AnimatorInflater; import android.animation.AnimatorSet; import android.animation.ObjectAnimator; import android.animation.ValueAnimator; import android.content.Context; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.widget.ImageView; import java.util.ArrayList; import java.util.List; /** * 第一步:在activity_main.xml文件中线性布局,其中包含两个水平的LinearLayout和一个imageView空间 * 其中,连个水平的线性布局中各包含5个按钮,用于实现 透明(alpha) 旋转(rotation) 缩放(scale) * 平移(translation) 集合(set)功能 * 第一行按钮:使用Xml资源文件的方式实现 * 第二行按钮:使用java代码的方式实现功能 * * 方法一:属性动画————使用Xml资源方式实现 * propertyName: * alpha.xml -- alpha rotate.xml -- rotation scale.xml -- scaleX scaleY * translate.xml -- translationX translationY * xml文件格式: * alpha.xml -- <objectAnimator 写属性/> * rotate.xml -- <objectAnimator 写属性/> * scale.xml --<set> <objectAnimator scaleX/> <objectAnimator scaleY/></set> * * java代码: * 对于 alpha.xml rotate.xml * ObjectAnimator animator_XXX_xml = (ObjectAnimator) AnimatorInflater.loadAnimator(mContext, R.animator.XXX); * 对于 scale.xml translate.xml * AnimatorSet animator_XXX_xml = (AnimatorSet) AnimatorInflater.loadAnimator(mContext, R.animator.XXX); *启动动画 * animator_XXX_xml.start(); * * 方法二、使用java代码实现相同的功能 *对于 alpha,rotate,scale,translate.xml * 都是: ObjectAnimator animator = ObjectAnimator.ofFloat(); * animator.setXXX(); * animator.start(); * 对于set来说 * 第一步: AnimatorSet animatorSet = new AnimatorSet(); * 第二步:ObjectAnimator animator = ObjectAnimator.ofFloat(); * animator.setXXX(); * 第三步:创建List集合 list<Animator> list = new ArrayList<>(); * list.add(animator); * .... * 第四部:设置动画的执行顺序Sequentially--按顺序的,Together---同步执行 * animatorSet.playSequentially(list); * 或者animatorSet.playTogether(list); * 第五步:启动动画 * animatorSet.start(); * * * */ public class MainActivity extends AppCompatActivity { private Context mContext = this; private ImageView imageView_main_show; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); } private void initView() { imageView_main_show = (ImageView) findViewById(R.id.imageView_main_show); } public void clickView(View view) { switch (view.getId()) { //使用资源文件写属性动画 case R.id.button_alpha_xml: ObjectAnimator animator_alpha_xml = (ObjectAnimator) AnimatorInflater.loadAnimator(mContext, R.animator.alpha); animator_alpha_xml.setTarget(imageView_main_show); animator_alpha_xml.start(); break; case R.id.button_rotate_xml: ObjectAnimator animator_rotate_xml = (ObjectAnimator) AnimatorInflater.loadAnimator(mContext,R.animator.rotate); animator_rotate_xml.setTarget(imageView_main_show); animator_rotate_xml.start(); break; case R.id.button_scale_xml: AnimatorSet animator_scale_xml = (AnimatorSet) AnimatorInflater.loadAnimator(mContext,R.animator.scale); animator_scale_xml.setTarget(imageView_main_show); animator_scale_xml.start(); break; case R.id.button_translate_xml: AnimatorSet animtor_translate_xml = (AnimatorSet) AnimatorInflater.loadAnimator(mContext,R.animator.translate); animtor_translate_xml.setTarget(imageView_main_show); animtor_translate_xml.start(); break; case R.id.button_set_xml: AnimatorSet animator_set_xml = (AnimatorSet) AnimatorInflater.loadAnimator(mContext,R.animator.set_animator); animator_set_xml.setTarget(imageView_main_show); animator_se 4000 t_xml.start(); break; //java代码写属性动画 case R.id.button_alpha: ObjectAnimator animator_alpha = ObjectAnimator.ofFloat(imageView_main_show, "alpha", 1.0f, 0.0f); animator_alpha.setRepeatMode(ValueAnimator.REVERSE); animator_alpha.setRepeatCount(ValueAnimator.INFINITE); animator_alpha.setDuration(3000); animator_alpha.start(); break; case R.id.button_rotate: ObjectAnimator animator_rotate = ObjectAnimator.ofFloat(imageView_main_show,"rotation",0,360); animator_rotate.setDuration(3000); animator_rotate.setRepeatCount(ValueAnimator.INFINITE); animator_rotate.setRepeatMode(ValueAnimator.REVERSE); animator_rotate.start(); break; case R.id.button_scale: ObjectAnimator animator_scaleX = ObjectAnimator.ofFloat(imageView_main_show,"scaleX",0,2.0f); animator_scaleX.setDuration(3000); animator_scaleX.setRepeatCount(ValueAnimator.INFINITE); animator_scaleX.setRepeatMode(ValueAnimator.REVERSE); animator_scaleX.start(); ObjectAnimator animator_scaleY = ObjectAnimator.ofFloat(imageView_main_show,"scaleY",0,2.0f); animator_scaleY.setDuration(4000); animator_scaleY.setRepeatCount(ValueAnimator.INFINITE); animator_scaleY.setRepeatMode(ValueAnimator.REVERSE); animator_scaleY.start(); break; case R.id.button_translate: ObjectAnimator animator_translateX = ObjectAnimator.ofFloat(imageView_main_show,"translationX",0,-100); ObjectAnimator animator_translateY = ObjectAnimator.ofFloat(imageView_main_show,"translationY",0,300); animator_translateX.setDuration(2000); animator_translateX.setRepeatCount(ValueAnimator.INFINITE); animator_translateX.setRepeatMode(ValueAnimator.REVERSE); animator_translateX.start(); animator_translateY.setDuration(2000); animator_translateY.setRepeatCount(ValueAnimator.INFINITE); animator_translateY.setRepeatMode(ValueAnimator.REVERSE); animator_translateY.start(); break; case R.id.button_set: AnimatorSet animatorSet = new AnimatorSet(); ObjectAnimator animator_translateX1 = ObjectAnimator.ofFloat(imageView_main_show,"translationX",0,100); ObjectAnimator animator_translateY1 = ObjectAnimator.ofFloat(imageView_main_show,"translationY",0,300); ObjectAnimator animator_translateX2 = ObjectAnimator.ofFloat(imageView_main_show,"translationX",100,0); ObjectAnimator animator_translateY2 = ObjectAnimator.ofFloat(imageView_main_show,"translationY",300,0); List<Animator> list = new ArrayList<>(); list.add(animator_translateX1); list.add(animator_translateY1); list.add(animator_translateX2); list.add(animator_translateY2); // animatorSet.playSequentially(list); animatorSet.playTogether(list); animatorSet.start(); break; } } }
用XML代码实现的动画如下:
<?xml version="1.0" encoding="utf-8"?> <objectAnimator xmlns:android="http://schemas.android.com/apk/res/android" android:duration="3000" android:propertyName="alpha" android:repeatCount="infinite" android:repeatMode="reverse" android:valueFrom="1.0f" android:valueTo="0.0" android:valueType="floatType" > </objectAnimator>
<?xml version="1.0" encoding="utf-8"?> <objectAnimator xmlns:android="http://schemas.android.com/apk/res/android" android:duration="3000" android:propertyName="rotation" android:repeatCount="infinite" android:repeatMode="reverse" android:valueFrom="0" android:valueTo="360" android:valueType="floatType"> </objectAnimator>
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" android:ordering="together"> <objectAnimator android:duration="3000" android:propertyName="scaleX" android:repeatCount="infinite" android:repeatMode="reverse" android:valueFrom="0" android:valueTo="2.0" android:valueType="floatType"/> <objectAnimator android:duration="3000" android:propertyName="scaleY" android:repeatCount="infinite" android:repeatMode="reverse" android:valueFrom="0" android:valueTo="2.0" android:valueType="floatType"/> </set>
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" android:ordering="together"> <objectAnimator android:duration="3000" android:propertyName="translationX" android:repeatCount="infinite" android:repeatMode="reverse" android:valueFrom="0" android:valueTo="200" android:valueType="floatType"/> <objectAnimator android:duration="3000" android:propertyName="translationY" android:repeatCount="infinite" android:repeatMode="reverse" android:valueFrom="0" android:valueTo="100" android:valueType="floatType"/> </set>
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" android:ordering="sequentially" > <objectAnimator android:duration="3000" android:propertyName="translationX" android:valueFrom="0" android:valueTo="200" android:interpolator="@android:anim/bounce_interpolator" android:valueType="floatType" /> <objectAnimator android:duration="3000" android:propertyName="translationY" android:valueTo="200" android:interpolator="@android:anim/bounce_interpolator" android:valueType="floatType" /> <objectAnimator android:duration="3000" android:propertyName="translationX" android:valueTo="0" android:interpolator="@android:anim/bounce_interpolator" android:valueType="floatType" /> <objectAnimator android:duration="3000" android:propertyName="translationY" android:valueTo="0" android:interpolator="@android:anim/decelerate_interpolator" android:valueType="floatType" /> </set>
相关文章推荐
- java反射机制(总结)
- 根据表结构自动生成JavaBean,史上最强最专业的表结构转JavaBean的工具(第4版)
- ubuntu16.04安装jdk并配置
- 刷题有感,java的大整数包运算
- [JavaWeb]表单提交的验证(onSubmit和function的应用)
- [JavaWeb]表单提交的验证(onSubmit和function的应用)
- java.lang.NoClassDefFoundError: weblogic/rmi/extensions/DisconnectListener
- java EE基础知识
- Spring面试题
- Spring整合MyBatis(二)源码分析
- Java并发机制及锁的实现原理
- Java类的构造方法
- java之抽象类与内部类
- 设计模式(2)_代理模式 ————— 控制对象访问
- 在springmvc中解决FastJson循环引用的问题
- java的重写、重载以及继承、多态和封装
- Java POI 读取 Execl 图片
- spring security 登录、权限管理配置
- java.io.IOException: open failed: ENOENT (No such file or directory)
- Java 基础复习实践 --- Hashcode Equals