Android当中的动画1—Drawable动画

这篇博客介绍了Android中的Drawable动画,详细解析了android:duraction属性,以及如何通过<layer-list>实现图层叠加效果。文章还提及将在后续分享View动画,即Tween动画的内容,期待读者的关注与反馈。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


    1、前言
    
        在我们Android开发当中,用户的交互占了很大的比重,而动画在用户看来,是很好的用户体验,也就是说如果掌握了动画,在UI方面,就可以实现很炫酷的效果,
    我是刘酸酸,今天第一次开博,将会写关于Android动画的一个专题,希望大家多多支持,有不对的地方可以在下方留言,我们一起进步,一起快乐的码代码。
    
    2、正文
        
        1、关于Android动画的总体的介绍,
            Android当中的动画,主要分为Frame(逐帧动画),View动画(补间动画),Property动画(属性动画),
            
                1、Frame(逐帧动画):做过视频的应该都知道,动作在某一瞬间就是一张图片,而这一张图片叫做这个视频的一帧,而帧动画就是在Drawable资源目录下去定义一系列的图片,而Android内部则让这一系列的图片动起来,就是所谓的帧动画,逐帧动画可以被定义在XML文件当中,也可以完全编码实现。
                    
                2、View动画(补间动画):通过对View的内容实现了一系列的图形变换操作,通过平移,缩放,旋转,改变透明度来实现动画的效果,在实现方面,可以通过XML文件来实现,也可以通过代码来实现

                3、Property动画(属性动画):这个先略过,我们会在下一节当中详细讲解
        
        2、通过Frame(逐帧动画)去实现一个动画。
            
                1、通过XML去定义Drawable资源文件,通常我们会在/res目录下的anim或者drawable目录下定义一个自己的文件,楼主我目录为/res/drawable/loading_bg.xml
                    注意:我们需要把所用到的图片放在drawable下,
               
<span style="font-size:14px;"><?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android" 
    android:oneshot="false">
    
    <item android:drawable="@drawable/loading00" android:duration="100"/>
    <item android:drawable="@drawable/loading01" android:duration="100"/>
    <item android:drawable="@drawable/loading02" android:duration="100"/>
    <item android:drawable="@drawable/loading03" android:duration="100"/>
    <item android:drawable="@drawable/loading04" android:duration="100"/>
    <item android:drawable="@drawable/loading05" android:duration="100"/>
    <item android:drawable="@drawable/loading06" android:duration="100"/>
    <item android:drawable="@drawable/loading07" android:duration="100"/>
    <item android:drawable="@drawable/loading08" android:duration="100"/>
    <item android:drawable="@drawable/loading09" android:duration="100"/>
    <item android:drawable="@drawable/loading10" android:duration="100"/>
    <item android:drawable="@drawable/loading11" android:duration="100"/>
    <item android:drawable="@drawable/loading12" android:duration="100"/>
    <item android:drawable="@drawable/loading13" android:duration="100"/>
    <item android:drawable="@drawable/loading14" android:duration="100"/>
    <item android:drawable="@drawable/loading15" android:duration="100"/>
    <item android:drawable="@drawable/loading16" android:duration="100"/>
    <item android:drawable="@drawable/loading17" android:duration="100"/>
    <item android:drawable="@drawable/loading18" android:duration="100"/>
    <item android:drawable="@drawable/loading19" android:duration="100"/>
    <item android:drawable="@drawable/loading20" android:duration="100"/>
    <item android:drawable="@drawable/loading21" android:duration="100"/>
    <item android:drawable="@drawable/loading22" android:duration="100"/>
    <item android:drawable="@drawable/loading23" android:duration="100"/>
    <item android:drawable="@drawable/loading24" android:duration="100"/>
    <item android:drawable="@drawable/loading25" android:duration="100"/>
    <item android:drawable="@drawable/loading26" android:duration="100"/>
    <item android:drawable="@drawable/loading27" android:duration="100"/>
    <item android:drawable="@drawable/loading28" android:duration="100"/>
    <item android:drawable="@drawable/loading29" android:duration="100"/>
    <item android:drawable="@drawable/loading30" android:duration="100"/>
    <item android:drawable="@drawable/loading31" android:duration="100"/>
    <item android:drawable="@drawable/loading32" android:duration="100"/>
    <item android:drawable="@drawable/loading33" android:duration="100"/>
    <item android:drawable="@drawable/loading34" android:duration="100"/>
    

</animation-list>
</span>


                <animation-list>元素是必须的,并且必须要作为根元素,可以包含一或多个<item>元素;
                    android:onshot如果定义为true的话,此动画只会执行一次,如果为false则一直循环。
                <item>元素代表一帧动画,
                    android:drawable指定此帧动画所对应的图片资源,

                    android:druation代表此帧持续的时间,整数,单位为毫秒。

                <layer-list>:是图层的意思,就是一个帧可以使用两张图片,而效果就是两张图片叠加在一块, 


                2、我们在自己的Activity的layout(/res/layout/activity_main.xml)文件当中引入自己的资源文件
               
<span style="font-size:14px;">        <ImageView
            android:id="@+id/iv"
            android:layout_width="100dip"
            android:layout_height="100dip"
            android:layout_centerInParent="true"
            android:background="@drawable/loading_bg"
            android:visibility="gone" />

</span>
                大家可以理解为,我在这里去设置了一个载体,我们通过这个载体去播放动画,注意我在background属性引入了我的动画,

                3、在Activity当中使用AnimationDrawable类去开始我们的动画就OK了

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		setContentView(R.layout.activity_main);
		super.onCreate(savedInstanceState);
		ImageView imageView = (ImageView) findViewById(R.id.iv);
	    AnimationDrawable anim = (AnimationDrawable) imageView.getBackground();
	    anim.start();
	}
              4、当然我们有的时候需要动态的给AnimationDrawable动画当中去动态的去添加我们所说的帧,那么我们不用去定义Drawable的动画资源了

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		setContentView(R.layout.activity_main);
		super.onCreate(savedInstanceState);
		ImageView imageView = (ImageView) findViewById(R.id.iv);
		AnimationDrawable animationDrawable = new AnimationDrawable();
		for(int i = 0; i < 35; i++){
			String name = i < 10 ? "0"+i : i+"";
			//根据资源名称和目录获取R.java中对应的资源ID
			int drawableId = getResources().getIdentifier("loading"+name, "drawable", getPackageName());
			Drawable drawable = getResources().getDrawable(drawableId);
			animationDrawable.addFrame(drawable, 100);
		}
		animationDrawable.setOneShot(false);
		imageView.setBackgroundDrawable(animationDrawable);
//		imageView.setBackground(animationDrawable);
		animationDrawable.start();
	}

楼主做的Demo是仿照音悦台App的加载框,大家可以看一下效果


明天晚上(2016/11/2)给大家讲解View动画,也就是Tween动画

希望大家多多支持,有错指出,


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值