您的位置:首页 > 其它

drawable下的动画实现

2016-07-03 15:54 218 查看
本文是基于如下代码的详细操作与理解

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: