import android.animation.AnimatorInflater;import android.animation.AnimatorSet;import android.animation.ObjectAnimator;import android.animation.ValueAnimator;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.util.Log;import android.view.View;import android.view.animation.TranslateAnimation;import android.widget.Button;import android.widget.Toast;import static soexample.umeng.com.attranimdemo_day14.R.id.Object_Anim;/** * 属性动画 * android 3.0过后出来的 api11过后的 * A       A * ValueAnimator类 * 定义:属性动画机制中 最核心的一个类 * 实现动画的原理:通过不断控制 值 的变化,再不断 手动 赋给对象的属性,从而实现动画效果 * ObjectAnimator类 * 通过不断控制 值 的变化,再不断 自动 赋给对象的属性,从而实现动画效果 * 

* 这个属性动画和我们之前的动画一样java代码和xml都可以使用 * Animator animator = AnimatorInflater.loadAnimator(context, R.animator.view_animation); * // 载入XML动画 *

* animator.setTarget(view); * // 设置动画对象 *

* animator.start(); * // 启动动画 */public class MainActivity extends AppCompatActivity implements View.OnClickListener { private Button Start_Anim; private Button Object_Anim; private Button XML_Anim; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); //缺点// TranslateAnimation translateAnimation = new TranslateAnimation(0, 100, 0, 100);// translateAnimation.setDuration(3000);// translateAnimation.setFillAfter(true);// Start_Anim.setAnimation(translateAnimation); } private void initView() { Start_Anim = (Button) findViewById(R.id.Start_Anim); Object_Anim = findViewById(R.id.Object_Anim); Start_Anim.setOnClickListener(this); Object_Anim.setOnClickListener(this); XML_Anim = findViewById(R.id.XML_Anim); XML_Anim.setOnClickListener(this); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.Start_Anim: valueAnimStart(); Toast.makeText(this, "吕小帅", Toast.LENGTH_SHORT).show(); break; case R.id.Object_Anim: //参数1:给某个对象设置动画,参数2:是什么动画呢// ObjectAnimator objectAnimator = ObjectAnimator.ofFloat(Start_Anim, "alpha", 1f, 0f, 1f);// objectAnimator.setDuration(2000);// objectAnimator.start(); // 步骤1:设置需要组合的动画效果 ObjectAnimator translation = ObjectAnimator.ofFloat(Start_Anim, "translationX", 0, 300, 500); // 平移动画 ObjectAnimator rotate = ObjectAnimator.ofFloat(Start_Anim, "rotation", 0f, 360f); // 旋转动画 ObjectAnimator alpha = ObjectAnimator.ofFloat(Start_Anim, "alpha", 1f, 0f, 1f); // 透明度动画 // 步骤2:创建组合动画的对象 AnimatorSet animSet = new AnimatorSet(); // 步骤3:根据需求组合动画// AnimatorSet.play(Animator anim) :播放当前动画// AnimatorSet.after(long delay) :将现有动画延迟x毫秒后执行// AnimatorSet.with(Animator anim) :将现有动画和传入的动画同时执行// AnimatorSet.after(Animator anim) :将现有动画插入到传入的动画之后执行// AnimatorSet.before(Animator anim) : 将现有动画插入到传入的动画之前执行 animSet.play(translation).with(rotate).before(alpha); animSet.setDuration(5000); // 步骤4:启动动画 animSet.start(); break; case R.id.XML_Anim: AnimatorSet set = (AnimatorSet) AnimatorInflater.loadAnimator(this, R.animator.set_animotor); set.setTarget(Object_Anim); set.start(); break; } } private void valueAnimStart() { //第一步创建对象 都是通过类名调用即可 //ofFloat float...可变参数 ValueAnimator valueAnimator = ValueAnimator.ofInt(Start_Anim.getLayoutParams().width, 500); valueAnimator.setDuration(3000); valueAnimator.setStartDelay(500); valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { @Override public void onAnimationUpdate(ValueAnimator animation) { //移动的单位 得值是跟你赋值对象的时候那个方法要一致 int currentValue = (Integer) animation.getAnimatedValue(); Start_Anim.getLayoutParams().width = currentValue; Log.e("currentValue", currentValue + "单位"); //刷新自定义View的方法// invalidate();// postInvalidate() //RequestLayout 三个方法都会执行 Start_Anim.requestLayout(); } }); valueAnimator.start(); }}

更多相关文章

  1. android开机动画
  2. Android(安卓)ProgressBar的动画效果
  3. Android(安卓)OkHttp的Cookie自动化管理
  4. 图解 Android(安卓)Handler 线程消息机制
  5. 图解 Android(安卓)Handler 线程消息机制
  6. Android调用WebService系列之KSoap2对象解析
  7. Android调用WebService系列之KSoap2对象解析
  8. Android的内存泄漏和调试
  9. Android中网络编程以及与服务器上Web项目的基础交互

随机推荐

  1. android的native开发的重要性
  2. Android异步任务和消息机制
  3. android仿网易云音乐引导页、仿书旗小说F
  4. 站在巨人的肩膀上学习Android开发
  5. Android内核与主线linux内核的比较(Androi
  6. (二)第一个Android程序 HelloWorld
  7. 将Unity3D游戏移植到Android平台上
  8. android集成 任务调度 cron4j
  9. Android输入事件从读取到分发一:是谁在读
  10. Android NDK Hello + JNI 与 NDK区别