Android valueAnimator和ObjectAnimator浅谈(一)
来源:互联网 发布:在这个网络信息时代 编辑:程序博客网 时间:2024/06/05 06:20
public class MainActivity extends AppCompatActivity {
TextView textView;@Overrideprotected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); textView= (TextView) findViewById(R.id.tv); /** * valueAnimator 动画类 * ValueAnimator是整个属性动画机制当中最核心的一个类, * 属性动画的运行机制是通过不断地对值进行操作来实现的, * 而初始值和结束值之间的动画过渡就是由ValueAnimator这个类来负责计算的。 * 它的内部使用一种时间循环的机制来计算值与值之间的动画过渡, * 我们只需要将初始值和结束值提供给ValueAnimator,并且告诉它动画所需运行的时长, * 那么ValueAnimator就会自动帮我们完成从初始值平滑地过渡到结束值这样的效果 */ ValueAnimator valueAnimator=ValueAnimator.ofFloat(0,1); valueAnimator.setDuration(3000); valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { @Override public void onAnimationUpdate(ValueAnimator animation) { //显示出:0-1之间值的,每个值代表一个动画的一帧 System.out.println("============="+animation.getAnimatedValue()); } }); // valueAnimator.setStartDelay(1000);//动画播放延迟的时间 // valueAnimator.setRepeatCount(3);//动画模式播放的次数 //循环模式包括RESTART和REVERSE两种,分别表示重新播放和倒序播放的意思 // valueAnimator.setRepeatMode(ValueAnimator.RESTART); valueAnimator.start();
注:ValueAnimator.ofFloat(0,1),为什么就是返回的(0,1)之间的数据呢?那,我要怎么才能返回自己需要的数据呢?这个就是涉及到TypeEvaluator类了,后续会着重讲到这个接口。这是个重点,切记切记。
/** * ObjectAnimator 动画类 * 继承于valueAnimator 类 * ofFloat( Object target, String propertyName, float... values)的3个参数 * target:目标,例如:控件 * propertyName:属性,目标所具有的属性 * values:该属性对应的一系列值 */ //该textView 先淡出,在显示。因为设置的是:alpha属性。 ObjectAnimator objectAnimator=ObjectAnimator.ofFloat(textView,"alpha",1f,0f,1f); objectAnimator.setDuration(6000); objectAnimator.start(); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ //该textView旋转,先旋转360后,在旋转回来 ObjectAnimator objectAnimator=ObjectAnimator.ofFloat(textView,"rotation",0f,360f,0f); objectAnimator.setDuration(6000); objectAnimator.start(); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ //获取当前控件的水平位置 float currentX=textView.getTranslationX(); //该textView从当前位置,先向左平移500个单位,在平移回到当前位置。 ObjectAnimator objectAnimator=ObjectAnimator.ofFloat(textView,"translationX",currentX,-500,currentX); objectAnimator.setDuration(5000); objectAnimator.start(); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // 该textView横向或者纵向拉伸 ObjectAnimator objectAnimator=ObjectAnimator.ofFloat(textView,"scaleY",1f,3f,1f); objectAnimator.setDuration(3000); objectAnimator.start();
/** * 组合动画 * * 实现组合动画功能主要需要借助AnimatorSet这个类,这个类提供了一个play()方法, * 如果我们向这个方法中传入一个Animator对象(ValueAnimator或ObjectAnimator)将会返回一个AnimatorSet.Builder的实例, * AnimatorSet.Builder中包括以下四个方法: * after(Animator anim) 将现有动画插入到传入的动画之前执行 * after(long delay) 将现有动画延迟指定毫秒后执行 * before(Animator anim) 将现有动画插入到传入的动画之后执行 * with(Animator anim) 将现有动画和传入的动画同时执行 */ ObjectAnimator objectAnimator=ObjectAnimator.ofFloat(textView,"alpha",1f,0f,1f); ObjectAnimator objectAnimator1=ObjectAnimator.ofFloat(textView,"rotation",0f,360f,0f); float currentX=textView.getTranslationX(); ObjectAnimator objectAnimator2=ObjectAnimator.ofFloat(textView,"translationX",currentX,-500,currentX); ObjectAnimator objectAnimator3=ObjectAnimator.ofFloat(textView,"scaleY",1f,3f,1f); ObjectAnimator objectAnimator4=ObjectAnimator.ofFloat(textView,"scaleX",1f,3f,1f); AnimatorSet animatorSet=new AnimatorSet(); animatorSet.play(objectAnimator) .after(objectAnimator2) .with(objectAnimator1) .with(objectAnimator3) .with(objectAnimator4); animatorSet.setDuration(5000); animatorSet.start();
/** * Animator监听器 * Animator类当中提供了一个addListener()方法,这个方法接收一个AnimatorListener,我们只需要去实现这个AnimatorListener就可以监听动画的各种事件了。 */ ObjectAnimator objectAnimator=ObjectAnimator.ofFloat(textView,"alpha",1f,0f,1f); objectAnimator.addListener(new Animator.AnimatorListener() { @Override public void onAnimationStart(Animator animation) { //动画开始 } @Override public void onAnimationEnd(Animator animation) { //动画结束 } @Override public void onAnimationCancel(Animator animation) { //动画取消 } @Override public void onAnimationRepeat(Animator animation) { //动画重复 } }); /** * 是也许很多时候我们并不想要监听那么多个事件,可能我只想要监听动画结束这一个事件, * 那么每次都要将四个接口全部实现一遍就显得非常繁琐。没关系,为此Android提供了一个适配器类, * 叫作AnimatorListenerAdapter,使用这个类就可以解决掉实现接口繁琐的问题了. */ objectAnimator.addListener(new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator animation) { super.onAnimationEnd(animation); } });}
}
1 0
- Android valueAnimator和ObjectAnimator浅谈(一)
- Android ValueAnimator和ObjectAnimator的高级用法(代码实现)
- android 动画 ValueAnimator 和ObjectAnimator 基本用法
- android ValueAnimator ObjectAnimator
- Android----ObjectAnimator and ValueAnimator
- ValueAnimator和ObjectAnimator
- 一个类学习android基础动画类(ObjectAnimator和AnimatorSet和ValueAnimator)
- Android属性动画解析(中),ValueAnimator和ObjectAnimator的高级用法
- (转载)Android属性动画完全解析(中),ValueAnimator和ObjectAnimator的高级用法
- android属性动画 —— ValueAnimator和ObjectAnimator的例子
- Android 属性动画ValueAnimator和ObjectAnimator的高级用法
- Android属性动画,ValueAnimator和ObjectAnimator的高级用法
- Android 动画之属性动画ValueAnimator和ObjectAnimator
- Android 属性动画valueAnimator和objectAnimator的使用
- Android 属性动画ValueAnimator和ObjectAnimator的高级用法
- 属性动画ValueAnimator和ObjectAnimator
- Android 属性动画(二):ObjectAnimator与ValueAnimator
- Android-Animator属性动画( ObjectAnimator , AnimatorSet , ValueAnimator )
- QT创建与调用Dll方法
- Vue 2.0 华丽的音乐搜索播放 Demo
- C#线程间操作无效: 从不是创建控件“dataGridView1”的线程访问它
- MFC Unicode类型函数转化
- 枚举类-自定义与使用enum关键字
- Android valueAnimator和ObjectAnimator浅谈(一)
- 使用php创建一个Rest Api
- net.sf.ezmorph.bean.MorphDynaBean cannotbe cast to xxx
- 关于typedef的用法总结
- Spring MVC之处理器映射器
- 站点收集
- 扩展Robot Framework,实现失败用例自动再执行(失败重跑)
- mui中 ajax无法跨域问题解决方案
- Matlab 1