ITKeyword,专注技术干货聚合推荐

注册 | 登录

【Android基础知识】Drawable Animation和View Animation

u010583599 分享于 2016-07-25

推荐:android动画之帧动画(drawable animation)和补间动画(view animation)

帧动画 drawable animation使用比较简单,而且支持市场上所以API版本,下面简单贴下代码。帧动画,就像GIF图片,通过一系列Drawable依次显示来模拟动画的效果。

2020腾讯云7月秒杀活动,优惠非常大!(领取2860元代金券),
地址https://cloud.tencent.com/act/cps/redirect?redirect=1040

2020阿里云最低价产品入口,含代金券(新老用户有优惠),
地址https://www.aliyun.com/minisite/goods

Android中的动画主要分为三类

1.Drawable Animation

2.View Animation

3.Property Animation

这里介绍其中的两类,Drawable Animation(逐帧动画)和View Animation

Drawable Animation 逐帧播放每一张图片,就好像动画播放一样。

View Animation  包括 平移动画 translate 、缩放动画 scale 、旋转动画 rotate 、渐变动画 alpha

推荐:Android视图动画(View Animation)

    你可以使用视图动画系统(View Animation)去处理渐变动画(tweened animation,也称补间动画)。补间动画常用根据一些动画信息(如起始点、终点、大小、旋转和其

Drawable Animation (逐帧动画)

我们使用 animation-list 来定义动画xml文件,在工程res的anim文件夹或者drawable文件夹下建立我们的动画文件

anim_list.xml

<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
    android:oneshot="false">
<!-- onshot 为true表示只播放一次,false表示循环播放 -->
    <item
        android:drawable="@drawable/one"
        android:duration="500"/>
    <item
        android:drawable="@drawable/two"
        android:duration="500"/>
    <item
        android:drawable="@drawable/three"
        android:duration="500"/>
    <item
        android:drawable="@drawable/four"
        android:duration="500"/>
    <item
        android:drawable="@drawable/five"
        android:duration="500"/>
    <item
        android:drawable="@drawable/six"
        android:duration="500"/>
</animation-list>
使用AnimationDrawable 启动动画,代码如下,调用stop可以停止动画

private AnimationDrawable walkDrawable;
image.setImageResource(R.drawable.anim_list);
			walkDrawable = (AnimationDrawable)image.getDrawable();
			walkDrawable.start();


View Animation

在代码中定义动画这里不做介绍,主要介绍在xml中定义动画 渐变动画
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >

    <alpha
        android:duration="1000"
        android:fromAlpha="0.1"
        android:toAlpha="1.0" >
    </alpha>

</set>
缩放动画
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >
    <scale
        android:duration="2000"
        android:fillAfter="false"
        android:fromXScale="0.0"
        android:fromYScale="0.0"
        android:interpolator="@android:anim/accelerate_decelerate_interpolator"
        android:pivotX="50%"
        android:pivotY="50%"
        android:toXScale="1.0"
        android:toYScale="1.0" />
</set>
平移动画
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >
    <translate
        android:duration="1000"
        android:fromXDelta="10"
        android:fromYDelta="10"
        android:toXDelta="100"
        android:toYDelta="100" />
</set>
旋转动画
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >
    <rotate
        android:duration="1000"
        android:fromDegrees="0"
        android:interpolator="@android:anim/accelerate_decelerate_interpolator"
        android:pivotX="50%"
        android:pivotY="50%"
        android:toDegrees="+360" />
</set>
加载xml动画的方式为
Animation loadAnimation;
loadAnimation = AnimationUtils.loadAnimation(this, R.anim.xxx);
view.startAnimation(loadAnimation);
缩放效果

旋转效果
透明度效果 平移效果
动画续播1,动画1播放完毕后播放动画2,这里使用了动画监听器,监听到动画1播放完毕的时候开始播放动画2
loadAnimation = AnimationUtils.loadAnimation(this, R.anim.translate);
			image.startAnimation(loadAnimation);
final Animation loadAnimation2 = AnimationUtils.loadAnimation(this,
					R.anim.rotate);
			//给动画1设置监听
			loadAnimation.setAnimationListener(new AnimationListener() {

				@Override
				public void onAnimationStart(Animation arg0) {

				}

				@Override
				public void onAnimationRepeat(Animation arg0) {

				}

				@Override
				public void onAnimationEnd(Animation arg0) {
					//动画1播放完毕播放动画2
					image.startAnimation(loadAnimation2);
				}
			});
动画续播2:直接在xml文件中进行动画的定义
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >

    <alpha
        android:duration="3000"
        android:fromAlpha="0.2"
        android:toAlpha="1.0" />
    <alpha
        android:duration="3000"
        android:fromAlpha="1.0"
        android:startOffset="3000"
        android:toAlpha="0.2" />

</set>
调用
loadAnimation = AnimationUtils.loadAnimation(this,R.anim.continue_anim);
image.startAnimation(loadAnimation);


闪烁效果,有透明变为不透明,设置倒序重复模式
//闪烁效果
			AlphaAnimation alphaAnimation = new AlphaAnimation(0.1f, 1.0f);
			alphaAnimation.setDuration(100);
			alphaAnimation.setRepeatCount(10);
			//倒序重复REVERSE  正序重复RESTART
			alphaAnimation.setRepeatMode(Animation.REVERSE);
			image.startAnimation(alphaAnimation);

抖动动画,就是左右平移,和闪烁效果一样,也是设置反向重复模式
TranslateAnimation translate = new TranslateAnimation(-50, 50,
					0, 0);
			translate.setDuration(1000);
			translate.setRepeatCount(Animation.INFINITE);
			translate.setRepeatMode(Animation.REVERSE);
			image.startAnimation(translate);
overridePendingTransition(设置界面切换动画)
zoom_in.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:interpolator="@android:anim/decelerate_interpolator" >
  
  <scale
        android:duration="1000"
        android:fromXScale="0.1"
        android:fromYScale="0.1"
        android:pivotX="50%"
        android:pivotY="50%"
        android:toXScale="1.0"
        android:toYScale="1.0" />
  <alpha
        android:duration="1000"
        android:fromAlpha="0"
        android:toAlpha="1.0" />
</set>
zoom_out.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:interpolator="@android:anim/decelerate_interpolator"
    android:zAdjustment="top" >
    <scale
        android:duration="@android:integer/config_mediumAnimTime"
        android:fromXScale="1.0"
        android:fromYScale="1.0"
        android:pivotX="50%p"
        android:pivotY="50%p"
        android:toXScale="0.1"
        android:toYScale="0.1" />
    <alpha
        android:duration="@android:integer/config_mediumAnimTime"
        android:fromAlpha="1.0"
        android:toAlpha="0" />
</set>
设置界面跳转动画
overridePendingTransition(R.anim.zoom_in,R.anim.zoom_out);


ListView布局动画,多个item同时执行一种效果。如果我们需要一个界面中的多个控件按照相同的动画方式但是每个控件完成该动画的时刻不同的话,就可采用LayoutAnimationController
LayoutAnimationController lac=new LayoutAnimationController(AnimationUtils.loadAnimation(this, R.anim.zoom_in));
	    //顺序播放
	    lac.setOrder(LayoutAnimationController.ORDER_NORMAL);
	    listView.setLayoutAnimation(lac);
	    listView.startLayoutAnimation();



推荐:Android animation学习笔记之view/drawable animation

   前一章中总结了android animation中property animation的知识和用法,这一章总结View animation和Drawable animation的有关知识:     View animation就是网上

Android中的动画主要分为三类 1.Drawable Animation 2.View Animation 3.Property Animation 这里介绍其中的两类,Drawable Animation(逐帧动画)和View Animation Drawable Animation 逐帧播

相关阅读排行


相关内容推荐

最新文章

×

×

请激活账号

为了能正常使用评论、编辑功能及以后陆续为用户提供的其他产品,请激活账号。

您的注册邮箱: 修改

重新发送激活邮件 进入我的邮箱

如果您没有收到激活邮件,请注意检查垃圾箱。