说起android动画,肯定大家都不会太陌生,想来实现动画的效果也有很多方法,今天小弟就给大家分享一下,安卓中比较常见的动画,帧动画,属性动画。
帧动画:
其实就是一组图片按照一定的时间间隔和顺序循环切换,因为切换时间间隔通常较短,以至于给人们一种“会动”的感觉,从而达到动画效果。举个例子,小时候常看到的放电影,其实就是一张张(图片)胶卷切换的而成的效果。
特点:帧动画通常是由多张相似的图片组成。
属性动画:
所谓属性动画,就更好理解了。属性就是对象的属性,比如动画中我们用一张图片那么图片的属性就有 尺寸 宽度,高度,透明度,角度等,属性动画就是通过改变图片对象的这些属性而达到一个动画的效果。
特点:属性动画的操作对象通常是一张图片
好了,说了这么多理论,我们来看看实际的吧,先预览下效果:
提示:真机上测试是好的,但是不知道为什么录制成gif后就出现缩放的时候有阴影。应该是跟录制软件有关。
贴心服务,在此给出图片素材。
接下来,要开始撸代码了,作为一个屌丝程序员,其实对撸代码这件事还是心里很**的。哈哈。
- 首先在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文件夹下的。
- 下来是布局文件 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添加监听和初始化
- 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动画的一部分,还有更多的需要我们平时自己去深入研究和学习的。。。