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

来源:互联网 发布:装修花费知乎 编辑:程序博客网 时间:2024/06/10 08:18

说起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动画的一部分,还有更多的需要我们平时自己去深入研究和学习的。。。

2 0
原创粉丝点击