drawable下的动画实现

本文是基于如下代码的详细操作与理解

res/drawable/anim_t.xml

<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
    android:oneshot="true">

    <item android:drawable="@drawable/idp" android:duration="300"/>
    <item android:drawable="@drawable/idq" android:duration="300"/>
    <item android:drawable="@drawable/idr" android:duration="300"/>
    <item android:drawable="@drawable/ids" android:duration="300"/>
    <item android:drawable="@drawable/idt" android:duration="300"/>
    <item android:drawable="@android:color/transparent" android:duration="300"/>
    
</animation-list>


1.建立drawable的资源文件

在res上右键,新建Android resource file文件,在其中的选项中选择drawable

{对于animation-list的使用便是如此}


2.相关属性的含义

<item/> 表示的是一帧,上面的代码中有6个item,表示有6帧

Android:oneshot  如果为true则表示播放一次,并且在最后一帧下停止,如果为false这表示循环播放,如上面的代码所示,每个item中加载了一个图片(图片在drawable下),true表示从第一个item中开始显示,直到最后一个便停止。

android:duration 表示持续的时间,见上面的代码,表示前面所加载的图片持续的时间(以毫秒为单位)

android:color/transparent 设置颜色为透明


3.使用

在xml文件中加入一个ImageView,在Java中如下设置

import android.app.Activity;
import android.graphics.drawable.AnimationDrawable;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;

public class MainActivity extends Activity implements View.OnClickListener {

    private AnimationDrawable animationDrawable;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ImageView imageView=(ImageView)findViewById(R.id.image);
        imageView.setImageResource(R.drawable.anim_t);
        animationDrawable=(AnimationDrawable)imageView.getDrawable();
        Button button=(Button)findViewById(R.id.button);
        button.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        animationDrawable.start();
    }
}
获取imageView,设置其资源为anim_t,使用AnimationDrawable来获取imageView的drawable资源,并操作

因为不能再onCreate中使用,故在点击事件中执行

4.对此代码分析中涉及到的其他问题

(1)聚焦问题

对于下面的一句话不是很理解,参考(1)中的

“动画的 start() 方法不能在 Activity 的 onCreate(Bundle savedInstanceState) 方法中执行,这是因为动画还没有完全的填充到窗口上。如果你想立即执行动画而不需要和用户进行交互,那么你可以在 Activity 的 onWindowFocusChanged() 方法中来调用 start() 方法。这样当你的应用在获得窗口焦点的时候 start() 就会马上被调用”

(2)imageView.setImageDrawable()和imageView.setImageResource()区别

一个是drawable,一个是id

http://jingyan.baidu.com/article/6525d4b1332117ac7d2e9433.html


附:参考

(1)http://www.cnblogs.com/sunzn/archive/2013/01/27/2878385.html

(2)http://blog.csdn.net/aminfo/article/details/7847761

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值