Android开发(android动画应用之objectAnimator(附实例))

在android学习中,我们需要掌握动画的知识,这样可以为我们的应用添加足够华丽灵动的操作体验,接下来我通过实例讲解ObjectAnimator实现动画效果,ObjectAnimator是ValueAnimator的子类。其功能更加强大了,可以对一个对象的属性进行动画操作。在Activity中用java代码如下使用:

ObjectAnimator animator = ObjectAnimator.ofFloat(textView,"alpha",1f,0f,1f); animator.setDuration(4000); animator.start();

可以看到,我们调用了ofFloat()方法来去创建一个ObjectAnimator的实例。这里第一个参数要求传入一个object对象,我们想要对哪个对象进行动画操作就传入相应的对象,这里传入了一个textview。第二个参数是想要对该对象的哪个属性进行动画操作(alpha、scale、translate、rotate等等),由于我们想要改变TextView的透明度,因此这里传入"alpha"。后面的参数就是不固定长度了,想要完成什么样的动画就传入什么值,这里传入的值就表示将TextView从常规变换成全透明,再从全透明变换成常规。之后调用setDuration()方法来设置动画的时长,然后调用start()方法启动动画。
具体想知道android是如何对相关属性进行更改的,我们可以为animator设置监听器,监控查看其中的变化。
animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { @Override public void onAnimationUpdate(ValueAnimator animation) { float value = https://www.it610.com/article/(float) animation.getAnimatedValue(); Log.d("Test", "cuurent value is " + value); } });

【Android开发(android动画应用之objectAnimator(附实例))】和Animation动画一样,属性动画也可以同时进行多个动画,用AnimatorSet来实现
float x1 = textView.getTranslationX(); ObjectAnimator animator = ObjectAnimator.ofFloat(textView,"alpha",1f,0f,1f); ObjectAnimator animator11 = ObjectAnimator.ofFloat(textView,"rotation",0f,360f); ObjectAnimator animator22 = ObjectAnimator.ofFloat(textView,"translationX",x1,x1+200f); AnimatorSet animatorSet = new AnimatorSet(); animatorSet.play(animator11).with(animator).with(animator22); animatorSet.setDuration(4000); animatorSet.addListener(new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator animation) { super.onAnimationEnd(animation); } }); animatorSet.start();

以上是在java代码中进行实现的,其实一般情况下,我们是通过XML资源文件进行设置的,接下来,我通过实例并以注释的方式进行讲解,展示如何在XML资源文件中使用ObjectAnimator。
新建一个项目实现使用Fragment切换时,切换的动画效果,实际上运用功能包含六个文件
首先我们需要先写出动画文件。






CardFlipActivity.java,在其中做几样事情,
  • 将Fragment转换设置我们刚做的自定义动画
  • 用新Fragment替换当前显示的Fragment,并且应用之前创建的动画到该事件中。
  • 添加之前显示的Fragment到Fragment的回退栈(back stack)中,所以当用户按下 Back 键时,Card会翻转回来。
package com.example.power.mytest; import android.app.Activity; import android.app.Fragment; import android.os.Bundle; import android.support.annotation.Nullable; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.Button; /** * Created by Power on 2018/10/23. */public class CardFlipActivity extends Activity { private boolean mShowingBack = false; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.cardflip_activity); Button button = (Button)findViewById(R.id.button_change); if(savedInstanceState == null){ getFragmentManager() .beginTransaction() .add(R.id.content_card, new CardFrontFragment()) .commit(); } }public static class CardFrontFragment extends Fragment{ @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) { return inflater.inflate(R.layout.fragment_card_front, container, false); } }public static class CardBackFragment extends Fragment{ @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) { return inflater.inflate(R.layout.fragment_card_back, container, false); } }private void flipCard(){ if(mShowingBack){ getFragmentManager().popBackStack(); return; }mShowingBack = true; getFragmentManager() .beginTransaction() .setCustomAnimations(R.animator.card_flip_left_in, R.animator.card_flip_left_out, R.animator.card_flip_right_in, R.animator.card_flip_right_out) .replace(R.id.content_card, new CardBackFragment()) .addToBackStack(null) .commit(); }public void chage(View view){ flipCard(); } }





    推荐阅读