一丶代码见本文
二丶演示效果(略)
三丶课程讲解
旋转
//图片x轴不变,转360度 public void click(View view) { ObjectAnimator .ofFloat(view, "rotationX", 0.0f, 360.0f) .start(); }
public void click(View view) { //多个动画组合 PropertyValuesHolder p1 = PropertyValuesHolder.ofFloat("alpha", 1f, 0f, 1f); PropertyValuesHolder p2 = PropertyValuesHolder.ofFloat("scaleX", 1f, 0f, 1f); PropertyValuesHolder p3 = PropertyValuesHolder.ofFloat("scaleY", 1f, 0f, 1f); //view :作用在哪个组件上 ObjectAnimator.ofPropertyValuesHolder(view, p1, p2, p3).setDuration(3000).start(); }
/** * 自由落体 * @param view */ public void click(View view) { final View view1 = view; //获取屏幕高度 dm.heightPixels DisplayMetrics dm = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(dm); //定义一个动画 ValueAnimator valueAnimator = ValueAnimator.ofFloat(view.getY(), dm.heightPixels,view.getY()).setDuration(500); //监听动画的每一个动作 valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { @Override public void onAnimationUpdate(ValueAnimator animation) { //可以将每一步动画设置在不同的组件上 view1.setTranslationY((Float) animation.getAnimatedValue()); } }); valueAnimator.start(); }
/** * 点击删除 这个组件 * * @param view */ public void click(View view) { ObjectAnimator alpha = ObjectAnimator .ofFloat(view, "alpha", 1f, 0f).setDuration(1000); final View v = view; //动画监听事件 alpha.addListener(new Animator.AnimatorListener() { @Override public void onAnimationStart(Animator animation) { //动画开始 } @Override public void onAnimationEnd(Animator animation) { //动画结束 //获取当前 view的上一级 ViewGroup viewGroup = (ViewGroup) v.getParent(); if (viewGroup != null) { viewGroup.removeView(v);//通过父级删除 view } } @Override public void onAnimationCancel(Animator animation) { //动画取消 } @Override public void onAnimationRepeat(Animator animation) { } }); alpha.start(); }
//适配器删除组件 /** * 点击删除 这个组件 * * @param view */ public void click(View view) { ObjectAnimator alpha = ObjectAnimator .ofFloat(view, "alpha", 1f, 0f).setDuration(1000); final View v = view; //动画监听事件 alpha.addListener(new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator animation) { //动画结束 //获取当前 view的上一级 ViewGroup viewGroup = (ViewGroup) v.getParent(); if (viewGroup != null) { viewGroup.removeView(v);//通过父级删除 view } } }); alpha.start(); }
/** * 自定义动画 执行 * * @param view */ public void click(View view) { //定义动画 ObjectAnimator a1 = ObjectAnimator.ofFloat(view, "translationX", 0f, 200f); ObjectAnimator a2 = ObjectAnimator.ofFloat(view, "translationY", 0f, 200f); ObjectAnimator a3 = ObjectAnimator.ofFloat(view, "rotation", 0.0f, 360.0f); AnimatorSet set = new AnimatorSet(); set.setDuration(1000); set.setInterpolator(new BounceInterpolator());//插值 :系统内置的一些动画 :反弹效果 // set.playTogether(a1, a2, a3); //三个动画同时执行 // set.playSequentially(a1, a2, a3); //按序列执行 // set.setStartDelay(300); //延迟执行 //a1 a2 同时执行,之后 a3 set.play(a1).with(a2); set.play(a3).after(a2); set.start();//启动动画 }
//加载 xml动画文件 /** * 使用 xml 定义动画 * * @param view */ public void click(View view) { ImageView iv = (ImageView) view; //实例化 xml定义的动画 Animator animator = AnimatorInflater.loadAnimator(this, R.animator.test); //作用在哪个视图上 animator.setTarget(iv); //开启动画 animator.start(); }