android实用技术Android技术知识Android开发

Android动画总结(一)

2017-03-28  本文已影响91人  呼吸的蜗牛

在我刚开始做移动App开发的时候,事实上,Android端的动画主要有2种:帧动画和补间动画。这两种动画,虽然能实现一些动画效果,然而却都存在着不小的缺陷。伴随着Android3.0的推出,google推出了更为强大的属性动画,前两种动画逐渐被替代。本篇文章也直接省略帧动画和补间动画,着重介绍属性动画。
首先介绍一下,最简单也最常用的几种动画:

 //渐变动画
 public void runAlphaAnimation(View view) {
    ObjectAnimator animator = ObjectAnimator.ofFloat(view, "alpha", 0.1f, 1.0f);
    animator.start();
}

//平移动画
public void runTranslateAnimation(View view) {
    ObjectAnimator animator = ObjectAnimator.ofFloat(view, "translationX", 0.5f, 80f);
    animator.start();
}

//缩放动画
public void runScaleAnimation(View view) {
    ObjectAnimator animator = ObjectAnimator.ofFloat(view, "scaleX", 0.1f, 1.0f);
    animator.start();
}

//旋转动画
public void runRotateAnimation(View view) {
    PropertyValuesHolder yHolder = PropertyValuesHolder.ofFloat("rotationY", 0f, 90f, 180f, 360f);
    PropertyValuesHolder xHolder = PropertyValuesHolder.ofFloat("rotationX", 0f, 90f, 180f, 360f);
    ObjectAnimator.ofPropertyValuesHolder(view, yHolder, xHolder).setDuration(1000).start();
}

  上面四种动画,基本涵盖了补间动画的所有操作。<code>PropertyValuesHolder </code>这个类,需要说明一下。它的作用,是可以把动画临时存储起来,然后播放动画时,同时执行。其效果等同于:

    ObjectAnimator xanimator = ObjectAnimator.ofFloat(view, "scaleX", 0.1f, 1.0f);
    ObjectAnimator yanimator = ObjectAnimator.ofFloat(view, "scaleY", 0.1f, 1.0f);
    AnimatorSet set = new AnimatorSet();
    set.play(xanimator).with(yanimator);

除了上面这4种最常用的,还有一种帧动画,我们也会经常需要用到。就是帧动画,可以参考帧动画替代方案这篇文章。不过使用的时候需要在布局文件中添加该控件,否则没有效果。

    <com.fragmenttest.LevelImageView
    android:id="@+id/image"
    android:layout_width="70dp"
    android:layout_height="70dp"
    android:layout_marginTop="20dp"/>

    java文件中:

    LevelImageView imageView     = (LevelImageView) findViewById(R.id.image);
   //设置level资源.
    imageView.setImageResource(R.drawable.level_image);
    imageView.setScaleType(ImageView.ScaleType.CENTER_INSIDE);
    //新建动画.属性值从1-10的变化
    ObjectAnimator headerAnimator = ObjectAnimator.ofInt(imageView, "imageLevel", 1, 4);
    //设置动画的播放数量为一直播放.
    headerAnimator.setRepeatCount(ObjectAnimator.INFINITE);
    //设置一个速度加速器.让动画看起来可以更贴近现实效果.
    headerAnimator.setInterpolator(new LinearInterpolator());
    headerAnimator.setRepeatMode(ObjectAnimator.RESTART);
    headerAnimator.setDuration(600);
    headerAnimator.start();
上一篇下一篇

猜你喜欢

热点阅读