Android动画-帧动画-属性动画

说起android动画,肯定大家都不会太陌生,想来实现动画的效果也有很多方法,今天小弟就给大家分享一下,安卓中比较常见的动画,帧动画,属性动画。

帧动画:

其实就是一组图片按照一定的时间间隔和顺序循环切换,因为切换时间间隔通常较短,以至于给人们一种“会动”的感觉,从而达到动画效果。举个例子,小时候常看到的放电影,其实就是一张张(图片)胶卷切换的而成的效果。

特点:帧动画通常是由多张相似的图片组成。

属性动画:

所谓属性动画,就更好理解了。属性就是对象的属性,比如动画中我们用一张图片那么图片的属性就有 尺寸 宽度,高度,透明度,角度等,属性动画就是通过改变图片对象的这些属性而达到一个动画的效果。

特点:属性动画的操作对象通常是一张图片

好了,说了这么多理论,我们来看看实际的吧,先预览下效果:
这里写图片描述
提示:真机上测试是好的,但是不知道为什么录制成gif后就出现缩放的时候有阴影。应该是跟录制软件有关。
贴心服务,在此给出图片素材。
这里写图片描述这里写图片描述这里写图片描述这里写图片描述这里写图片描述这里写图片描述这里写图片描述这里写图片描述这里写图片描述这里写图片描述
接下来,要开始撸代码了,作为一个屌丝程序员,其实对撸代码这件事还是心里很**的。哈哈。

  1. 首先在drawable下创建一个xml文件
<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
    android:oneshot="false">
    <!--oneshot为false表示动画一直循环播放,反之-->
    <!-- 一个item标签描述 一帧 动画 -->
    <item android:drawable="@drawable/h1" android:duration="50"/>
    <item android:drawable="@drawable/h2" android:duration="50"/>
    <item android:drawable="@drawable/h3" android:duration="50"/>
    <item android:drawable="@drawable/h4" android:duration="50"/>
    <item android:drawable="@drawable/h5" android:duration="50"/>
    <item android:drawable="@drawable/h6" android:duration="50"/>
    <item android:drawable="@drawable/h7" android:duration="50"/>
    <item android:drawable="@drawable/h8" android:duration="50"/>
    <item android:drawable="@drawable/h9" android:duration="50"/>
    <item android:drawable="@drawable/h10" android:duration="50"/>

</animation-list>

同时图片h1-h10也是在drawable文件夹下的。

  1. 下来是布局文件 activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
                xmlns:tools="http://schemas.android.com/tools"
                android:id="@+id/activity_main"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                tools:context="anim.com.anim.MainActivity">


    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:clickable="true"
        android:text="动起来"/>

    <Button
        android:id="@+id/button2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBaseline="@+id/button1"
        android:layout_alignBottom="@+id/button1"
        android:clickable="true"
        android:layout_centerHorizontal="true"
        android:text="平移"/>

    <Button
        android:id="@+id/button3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBaseline="@+id/button2"
        android:layout_alignBottom="@+id/button2"
        android:layout_alignParentRight="true"
        android:clickable="true"
        android:text="属性动画缩放"/>

    <ImageView
        android:id="@+id/anim_iv"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:background="@drawable/h1"/>
</RelativeLayout>

布局很简单,就放了三个Button和一个Imageview,没什么可说的。
做完以上,顺便给三个Button和Imageview添加监听和初始化

  1. ManiActivity中核心代码:
    @Override
    public void onClick(View v) {
        switch (v.getId()){
            //当点击“动起来”按钮时 执行
            case R.id.button1:
                Toast.makeText(MainActivity.this,"点击了动起来",Toast.LENGTH_SHORT).show();
                imageView.setBackgroundResource(R.drawable.huitailang);
                //创建anim对象 获取imageView的背景 赋给anim对象
                AnimationDrawable animationDrawable = (AnimationDrawable) imageView.getBackground();
                animationDrawable.start();
                break;
            //当点击"平移"时执行
            case R.id.button2:
                //平移轨迹
                TranslateAnimation translateAnimation = new TranslateAnimation(0,0,0,450);
                translateAnimation.setDuration(4000);
                //动画完成后是否回归原位
                translateAnimation.setFillAfter(false);
                //启动动画
                imageView.startAnimation(translateAnimation);
                break;

            //当点击"属性动画缩放"时执行
            case R.id.button3:
                ObjectAnimator objectAnimator = ObjectAnimator.ofFloat(imageView,"alpha",0f,1f);
                objectAnimator.setInterpolator(new LinearInterpolator());
                objectAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
                    @Override
                    public void onAnimationUpdate(ValueAnimator animation) {
                        Float value = (Float) animation.getAnimatedValue();
                        imageView.setAlpha(value);
                        imageView.setScaleX(value*3);
                        imageView.setScaleY(value*3);
                    }
                });
                objectAnimator.setDuration(5000);
                //设置重复次数,无限重复
                objectAnimator.setRepeatCount(ObjectAnimator.INFINITE);
                //设置重复模式,从头开始
                objectAnimator.setRepeatMode(ObjectAnimator.REVERSE);
                //启动动画
                objectAnimator.start();
                break;

        }
    }

到这里就基本完成了,其实这里说的只是Android动画的一部分,还有更多的需要我们平时自己去深入研究和学习的。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值