美文网首页
Android 动画:逐帧动画,补间动画和属性动画

Android 动画:逐帧动画,补间动画和属性动画

作者: 因为我的心 | 来源:发表于2021-01-06 16:53 被阅读0次

一、前言:

1.三种动画的介绍

现在 Android 常用的动画有三种: 逐帧动画,补间动画和属性动画;

FrameAnimation(逐帧动画):将多张图片组合起来进行播放,很多 App 的加载动画是采用这种方式(如:美团,去哪儿)。

TweenAnimation(补间动画):补间动画由 Animation 类来实现具体效果,包括平移(TranslateAnimation)、缩放(ScaleAnimation)、旋转(RotateAnimation)、透明度(AlphaAnimation)四个子类,四种变化,但补间动画只是达到了其视觉效果,并不是真正的位置上的变化。(属性动画出来之后,补间动画就不那么常用了)。

PropertyAnimation(属性动画):最为强大的动画,弥补了补间动画的缺点,实现位置+视觉的变化。下面重点讲解属性动画:

图片1.png 图片2.png

2.PropertyAnimation(属性动画)实例

下面是一个类似弹幕的例子,弹幕从最右边划入,滑到中间停留一下,从最左边划出(做 gif 动图不会。。所以先看下截图)

(demo下载地址 https://download.csdn.net/download/wuqingsen1/10644093):

图片3.png

首先初始化两个 ObjectAnimator 和一个 AnimatorSet ,其次利用组合动画来实现,代码如下:

public class MainActivity extends AppCompatActivity {
    private TextView tv_show;
    private AnimatorSet set = new AnimatorSet();
    private ObjectAnimator animator1;
    private ObjectAnimator animator2;
    private LinearLayout ll_login;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        tv_show = findViewById(R.id.tv_show);
        ll_login = findViewById(R.id.ll_login);
        
        tv_show.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                ll_login.setVisibility(View.VISIBLE);
                //第一个动画 animator1 和第二个动画 animator2 
                animator1 = ObjectAnimator.ofFloat(ll_login, "translationX", 800, 0, 0);
                animator2 = ObjectAnimator.ofFloat(ll_login, "translationX", 0, -800, -800);
                //先执行第一个动画,再执行第二个动画
                set.play(animator1).before(animator2);
                set.setDuration(3000);
                set.start();
            }
        });
    }
}

3.FrameAnimation(逐帧动画)实例

下面是三张图片来回切换的例子

(demo下载地址为https://download.csdn.net/download/wuqingsen1/10644237 ):

图片4.png

建一个名字为 zhuzhen 的 xml 文件,里面内容为:

<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
    android:oneshot="false" >
    <!-- animation-list 帧动画 -->
    <!-- android:oneshot的值为 false代表播放多次,true代表只播放一次 -->
    <!-- duration代表每张图片的播放时间 ,定义一个持续时间为50毫秒的动画帧 -->
    <item
        android:drawable="@drawable/img00"
        android:duration="200"/>
    <item
        android:drawable="@drawable/img01"
        android:duration="200"/>
    <item
        android:drawable="@drawable/img02"
        android:duration="200"/>
</animation-list>

代码中设置:

public class MainActivity extends AppCompatActivity {
    private ImageView iv_zhuzhen;
    private AnimationDrawable animationDrawable;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        iv_zhuzhen = findViewById(R.id.iv_zhuzhen);
        // 把动画资源设置为imageView的背景,也可直接在XML里面设置
        iv_zhuzhen.setBackgroundResource(R.drawable.zhuzhen);
        animationDrawable = (AnimationDrawable) iv_zhuzhen.getBackground();
        if (animationDrawable != null && !animationDrawable.isRunning()) {
            animationDrawable.start();//动画开始
        }
    }
}

相关文章

  • Android 动画锦集

    Android 动画可分为逐帧动画、补间动画、属性动画。使用传统的逐帧动画、补间动画可以实现 Android 基本...

  • Android 动画

    android动画分为三种 帧动画,视图动画(补间动画),属性动画逐帧动画 视图动画 属性动画 Window和A...

  • Android动画

    Android动画分类: 视图动画:补间动画、逐帧动画 属性动画 视图动画 补间动画 可以在xml中定义动画,然后...

  • Android 动画解析

    Android 的动画分类: View视图动画(补间动画 / 逐帧动画) 属性动画Android 动画 0x01 ...

  • Android 动画总结

    Android 中的动画可以分为以下几类: 逐帧动画 补间动画 属性动画 一、逐帧动画 逐帧动画的原理就是让一系列...

  • 安卓动画

    Android 中的动画可以分为以下几类: 逐帧动画 补间动画 属性动画 1、逐帧动画 逐帧动画的原理就是让一系列...

  • Android 动画

    动画类型 视图动画(补间动画、逐帧动画)属性动画 补间动画 逐帧动画 属性动画 对比 插值器:确定属性值从初始值过...

  • Android动画

    文章脑图 1、Android动画种类 逐帧动画、补间动画、属性动画 逐帧动画 逐帧动画的原理就是让一系列的静态图片...

  • Android 动画

    Android中动画分为三种: 逐帧动画 补间动画 属性动画 逐帧动画 逐帧动画类似于gif或是电影的原理,通过将...

  • 动画基础全面总结

    动画分类: 逐帧动画(Frame)补间动画(Tween)属性动画(Property)(Android 3.0以后引...

网友评论

      本文标题:Android 动画:逐帧动画,补间动画和属性动画

      本文链接:https://www.haomeiwen.com/subject/yhxooktx.html